Meteor 什么';Template.Instance()和Template.data之间的区别是什么?
当创建流星事件处理程序时,以下两者之间的区别是什么Meteor 什么';Template.Instance()和Template.data之间的区别是什么?,meteor,Meteor,当创建流星事件处理程序时,以下两者之间的区别是什么 'click .something': function(e,t){ var data = t.data } vs 他们两人似乎提出了相同的数据。有什么理由我应该选择其中一个吗?它实际上是Template.instance()(具有较低的I),由于此函数返回范围中的当前模板实例(事件发生的地方),因此与事件处理程序的第二个参数没有区别,该参数也保存当前模板实例,这就是为什么您可以在事件处理程序中使用template.instance(
'click .something': function(e,t){
var data = t.data
}
vs
他们两人似乎提出了相同的数据。有什么理由我应该选择其中一个吗?它实际上是
Template.instance()
(具有较低的I),由于此函数返回范围中的当前模板实例(事件发生的地方),因此与事件处理程序的第二个参数没有区别,该参数也保存当前模板实例,这就是为什么您可以在事件处理程序中使用template.instance().data
或t.data
无差别地访问模板数据
但是,有一种更简单的方法可以访问事件处理程序中的当前数据上下文:this对象绑定到触发事件的数据上下文。类似问题如下:
要认识到的是:
在模板生命周期函数中(onCreate,onRendered…)此
等于template.instance()
因此此.data
与当时的template.instance().data
相同
在助手或事件中,此
是当前的数据上下文
因此,这里需要注意一件重要的事情:如果您的数据在上游发生变化,那么数据上下文会随着时间的推移而变化:
如果将数据传递给模板,则该模板将使用新数据重新呈现。新数据=新数据上下文
所以,如果你做了如下事情:
Template.example.onCreated(function() {
this.data.myKey = "my example data set on template creation"; //WRONG!
// or equivalently:
Template.instance().data.myOtherKey = "another key"; //WRONG!
})
好的,这些数据可能位于您的助手(this.myKey
)中的this
(即数据上下文)下,但前提是上游数据不变
一旦上游数据发生更改,此
将成为新的数据上下文,并且不包含您添加的数据
因此,总而言之:
如果需要在onCreated
或onRendered
中向模板添加上下文,请确保不将其绑定到当前数据上下文,而是绑定到模板。实例()
你应该做:
Template.example.onCreated(function() {
this.myKey = "my example data set on template creation";
// or equivalently:
Template.instance().myOtherKey = "another key";
})
您可以通过访问helper和events中的这些数据
Template.instance().myKey
Template.instance
目前仅在助手中有用。在其他地方(如创建的
回调、呈现的
回调等),您可以通过其他方式获取模板实例,但在这些情况下,您也可以使用template.instance
,如果您愿意的话。请注意,正如我在下面的回答中所述,您可以通过这种方式访问template.instance()数据,您不应该将自己的数据放在这个上下文中,否则它可能会在下一个模板呈现时消失。
Template.example.onCreated(function() {
this.myKey = "my example data set on template creation";
// or equivalently:
Template.instance().myOtherKey = "another key";
})