在创建Meteor事件处理程序时,有什么区别......
'click .something': function(e,t){
var data = t.data
}
Run Code Online (Sandbox Code Playgroud)
VS
'click .something': function(e,t){
var data = Template.instance().data
}
Run Code Online (Sandbox Code Playgroud)
他们似乎都提出了相同的数据.我应该选择其中一个原因吗?
类似的问题:
要意识到的是:
在模板生命周期功能(onCreated,onRendered ...)this等于Template.instance()所以this.data是一样的Template.instance().data,当时!
在帮助器或事件中,this是当前数据上下文.
所以,请注意一件重要的事情:如果数据在上游发生变化,数据上下文可能会随时间变化:
如果将数据传递给模板,则将使用新数据重新呈现模板.新数据=新数据上下文.
所以如果你做的事情如下:
Template.example.onCreated(function() {
this.data.myKey = "my example data set on template creation"; //WRONG!
// or equivalently:
Template.instance().data.myOtherKey = "another key"; //WRONG!
})
Run Code Online (Sandbox Code Playgroud)
好吧,这个数据可能this在你的帮助程序(this.myKey)中(即数据上下文),但只有在上游数据不变的情况下.
一旦上游数据发生变化,this将成为新的数据上下文,并且不会包含您添加的数据.
所以,总结一下:
如果你需要的上下文添加到您的模板onCreated或者onRendered,请务必不要将其绑定到当前的数据范围内,但对Template.instance()
你应该做:
Template.example.onCreated(function() {
this.myKey = "my example data set on template creation";
// or equivalently:
Template.instance().myOtherKey = "another key";
})
Run Code Online (Sandbox Code Playgroud)
并且您可以通过帮助和事件访问此数据
Template.instance().myKey
实际上Template.instance()(i 较小),并且由于此函数返回范围内的当前模板实例(事件起源的实例),因此与事件处理程序的第二个参数没有区别,该参数也保存当前模板实例,这这就是为什么您可以使用事件处理程序Template.instance().data或t.data在事件处理程序中访问模板数据。
然而,有一种更简单的方法可以访问事件处理程序内的当前数据上下文:对象this绑定到触发事件的数据上下文。
| 归档时间: |
|
| 查看次数: |
3123 次 |
| 最近记录: |