codecamp

第 4 章 步骤 3:添加一个按钮

在这一步中,你将添加一个按钮。应用启用时,文本字段中没有文本。用户单击按钮时,应用将显示出 Anne Bonney 的字样。

编辑 piratebadge.html

...
<div class="widgets">
  <div>
    <input type="text" id="inputName" maxlength="15">
  </div>
  <div>
    <button id="generateButton">Aye! Gimme a name!</button>
  </div>
</div>
...
  • 按钮有一个 ID 叫做 generateButton ,所以Dart可以找到它。

编辑 piratebadge.dart

import 'dart:html';
ButtonElement genButton;
  • 按钮元素是 dart:html 中众多元素的一个。
  • 变量,包括数字,如果没有实质内容,就为null。

    void main() {
    querySelector('#inputName').onInput.listen(updateBadge);
    genButton = querySelector('#generateButton');
    genButton.onClick.listen(generateBadge);
    }

  • 注册一个 click 事件

    ...
    void setBadgeName(String newName) {
    querySelector('#badgeName').text = newName;
    }

  • 这个方法更新了 HTML 页面

为按钮实现一个点击监听

...
void generateBadge(Event e) {
  setBadgeName('Anne Bonney');
}
  • 这个方法将 badgeName 的显示内容设置为了 Anne Bonney 。

修改 updateBadge() 方法,在其中调用 setBadgeName() 方法

void updateBadge(Event e) {
  String inputName = (e.target as InputElement).value;
  setBadgeName(inputName);
}
  • 将文本框输入的值赋值给一个本地 String 变量

updateBadge() 方法中添加一个 if-else 结构

void updateBadge(Event e) {
  String inputName = (e.target as InputElement).value;
  setBadgeName(inputName);
  if (inputName.trim().isEmpty) {
    // To do: add some code here.
  } else {
    // To do: add some code here.
  }
}
  • String 来源于 dart:core 库,这个库在每一个 Dart程序中都被自动添加。

  • Dart 拥有公共的语言结构,例如 if-else

    void updateBadge(Event e) {
    String inputName = (e.target as InputElement).value;
    setBadgeName(inputName);
    if (inputName.trim().isEmpty) {
    genButton..disabled = false
    ..text = 'Aye! Gimme a name!';
    } else {
    genButton..disabled = true
    ..text = 'Arrr! Write yer name!';
    }
    }

  • updateBadge() 的代码在按钮元素上使用 cascade 操作。其结果和下面代码结果一样

    genButton.disabled = false;
    genButton.text = 'Aye! Gimme a name!';

运行应用

保存你的文件

右击 piratebadge.html 选择 Run in Dartium

和下面的实际比较一下。

第 3 章 步骤 2:添加一个输入框
第 5 章 步骤 4:创建一个 PirateName 的类
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }