Template.instance()和this之间的区别

时间:2015-09-12 02:31:35

标签: meteor

Template.instance()和这个有什么区别?使用其中一个是否有优势?

<application
    android:label="DumbCardElevation"
    android:theme="@android:style/Theme.Holo.Light" >
    <activity
        android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

1 个答案:

答案 0 :(得分:7)

如果在onCreatedonRenderedonDestroyed等生命周期事件中,Template.instance()将返回与this相同的对象,因为在这些回调注册功能中,this由Meteor明确设置为当前模板实例。

HTML

<template name="component">
  <div class="component">
    <p>Hello <em>{{name}}</em>, click the button!</p>
    <button type="button">Click me!</button>
    <p>You clicked <strong>{{count}}</strong> time(s) on the button.</p>
  </div>
</template>

<body>
  {{> component name="World"}}
</body>

JS

Template.component.onCreated(function(){
  console.log(this == Template.instance());
  // use this to access the template instance
  this.count = new ReactiveVar(0);
  // use this.data to access the data context
  console.log(this.data.name == "World");
});

但是在模板助手中,this绑定到模板的数据上下文,而不是模板实例本身,因此使用Template.instance()是访问执行帮助程序的模板实例所必需的。

Template.component.helpers({
  count: function(){
    // use this to access the data context
    console.log(this.name);
    // use Template.instance() to access the template instance
    return Template.instance().count.get();
  }
});

最后,在模板事件中,this也绑定到模板的数据上下文,但是使用额外的template参数调用事件处理程序,您可以将其用作{Template.instance()的简写。 1}}。

Template.component.events({
  "click button": function(event, template){
    // use this to access the data context
    console.log(this.name);
    // use the argument to access the template instance
    var currentCount = template.count.get();
    template.count.set(currentCount + 1);
  }
});