Meteor开发平台入门 互动版

模板事件处理

我们已经了解,可以使用模板实例对象的events(eventMap)方法为模板声明事件 绑定

Template.hello.events({
  "click":function(event,tpl){...}
});

在事件处理函数体内,可以使用this访问模板实例对象的数据上下文,使用event 参数获取DOM事件的详细信息,使用tpl参数操作DOM树。

≡ 事件处理函数中的this对象

在事件处理函数体内,this指向当前的数据上下文对象。例如,对于下面的模板:

<template name="hello">
  {{#with name="jOHN" tel="114"}}
  <button>dial</button>
  {{/with}}
</template>

可以在button的click事件处理函数中通过this对象获得数据上下文的tel属性:

Template.hello.events({
  "click button":function(event,tpl){
    var tel = this.tel; //114
    //拨号.....
  }
});

≡ 事件处理函数的tpl参数

事件处理函数的tpl参数代表模板实例对象,可以利用其jquery/$对象 实现DOM操作。

下面的示例将在用户点击load按钮时,使用从后端载入的数据填充textarea元素:

Template.hello.events({
  "click button#load" : function(event,tpl){
    var content;
    //从后端载入数据存入内容...
    tpl.$("textarea").text(content);
  }
});

≡ 事件处理函数的event参数

事件处理函数的event参数是一个标准的DOM事件对象,可以使用event 参数获得事件的详细信息。

下面的示例中,当在用户名输入框中按回车键后,将切换输入焦点到密码输入框:

Template.hello.events({
  "keypress input#user":function(event,tpl){
    if(event.keyCode===13) tpl.$("input#pass").focus();
  }
});

常见的DOM事件如下:

  • click - 点击事件
  • dblclick - 双击事件
  • focus/blue - 元素在获得/失去焦点时将触发该事件
  • change - 元素在状态变化时将触发该事件
  • mouseenter/mouseleave - 当鼠标进入/移出元素的边界时触发该事件
  • mousedown/mouseup - 按下/松开鼠标键时触发
  • keydown/keyup - 按下/松开键盘某键时触发
  • keypress - 击键时触发

执行以下命令复位test应用、删除源文件:

~/test$ meteor reset↵ ~/test$ rm -rf \*↵

执行以下命令拷贝tpl-events示例代码、运行并查看运行结果:

~/test$ cp ~/demos/tpl-events/* .↵ ~/test$ meteor↵

理解并修改tpl-events示例代码,通过练习掌握在Meteor应用中如何为模板中DOM对象 声明事件绑定。