3

我想将我创建的对象存储Template.myTemplate.rendered = function ( ) { ... }Template.myChildTemplate.helpers(helpers). 到目前为止,我正在使用全局对象,但这感觉很hacky。有没有一种很好的以模板为中心的方式来做到这一点?

4

2 回答 2

2

您可以使用UI._templateInstance();and ReactiveDict(使您的数据也具有反应性)(添加meteor add reactive-dict

Template.myTemplate.created = function() {
    this.templatedata = new ReactiveDict();

}
Template.myTemplate.rendered = function() {
    this.templatedata.set("myname", "value";
};

Template.myTemplate.helpers({
    myvalue: function() {
        var tmpl = UI._templateInstance();
        return tmpl.templatedata.get('myname');
    }
});

这将允许您在页面上多次使用此模板,并且每个模板仍然具有变量范围,这是全局变量或非实例变量所不允许的。

警告说明,当前的铁路由器(0.7.1)坏了UI._templateInstance();,目前这是一个开放的错误

于 2014-07-07T08:45:27.193 回答
1

不幸的是,还没有这样的方法。

常见的模式是使用响应式字典作为文件范围的变量,或者如果您需要在多个文件中访问,则在与模板相关的命名空间中使用。此解决方案的缺点是此类变量在同一模板的所有实例之间共享,因此如果您在多个位置呈现此模板,则必须解决此问题。

var data = new ReactiveDict();

Template.myTemplate.rendered = function() {
  data.set('key', 'value');
};
于 2014-07-07T07:22:59.053 回答