Meteor.js:template..events vs Template。<template> .events&#39; this&#39;绑定似乎不一致

时间:2016-01-16 18:42:04

标签: meteor binding meteor-blaze

我正在浏览Meteor简单教程以及“这个&#39;在我不可知的状态下,不同模板对象中的绑定工作似乎与我不一致。

/

我可以看到该任务是在视图中定义的xml模板,它是BASE_URL = 'https://api.github.com/licenses/' 对象中函数返回的项目的直观表示。

我想任务对象都绑定了每个对象的html表示形式(虽然我不知道怎么看似不是Template.body.events({ "submit .new-task": function(event) { console.log(this); // Logs an empty object } }) Template.task.events({ "click .toggle-checked": function() { console.log(this); // logs a task } }); 元素中的任何标识属性? )

总之。单击任务时,Template.body.helpers是任务。但是当我提交表格时,我期待li成为正文。为什么不呢?

我期待Meteor以类似的方式处理thisthis

1 个答案:

答案 0 :(得分:1)

在Meteor this中引用数据上下文。您可以使用帮助程序或路由控制器(IronRouter或FlowRouter)

来定义它

示例:

{{#with myData}}
    <h1>{{title}}</h1>
{{/with}}

JS

Template.yourTemplate.helpers({
    myData : function(){
        return {
            title : "My title" 
        }
    }
})

您需要使用&#34;事件&#34;参数

Template.task.events({
     "click .toggle-checked": function( event , instance ) {
         console.log( event );
     }   
});

实例参数也非常有用。您可以访问jQuery选择器,例如:instance.$(),它只会搜索模板上的元素以及子模板。

我个人经常使用这个实例。我最喜欢的模式是:

Template.task.onCreated(function(){
    this.vars = new ReactiveDict();
    this.data = "some data";
});

稍后,如果您想访问varsdata

  • 事件 - 您可以在参数
  • 上获得此信息
  • 助手 - var instance = Template.instance();

使用实例,您可以避免在全局命名空间中存储状态,例如Session,并且您的代码更易于维护和理解。我希望这可以帮助您了解模板在Blaze中的工作原理。