Meteor:将对象存储在render()中以用于子助手

时间:2014-07-07 05:04:56

标签: meteor meteor-blaze

我想存储我在Template.myTemplate.rendered = function ( ) { ... }期间创建的对象,并在Template.myChildTemplate.helpers(helpers)中使用该对象。到目前为止,我正在使用一个全局对象,但这感觉非常hacky。这是一种以模板为中心的好方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用UI._templateInstance();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();open bug此刻。

答案 1 :(得分:1)

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

常见的模式是将反应式字典用作文件范围的变量,或者如果需要在多个文件中进行访问,则使用与模板相关的命名空间。这个解决方案的缺点是这个变量在同一个模板的所有实例之间共享,所以如果你在多个地方渲染这个模板,你必须解决这个问题。

var data = new ReactiveDict();

Template.myTemplate.rendered = function() {
  data.set('key', 'value');
};