如何从Meteor 0.8.0 Blaze中的助手访问模板实例

时间:2014-04-01 20:09:16

标签: javascript meteor

Meteor 0.8.0中的change in behavior for the Template.foo.rendered callback意味着我们不会自动使用渲染的回调作为在模板内容发生变化时操纵DOM的方法。实现这一目标的一种方法是使用https://github.com/avital/meteor-ui-new-rendered-callback中的反应性助手。理论上,反应助手只有在相关项目发生变化时才会被触发,从而有助于提高绩效。

但是,现在出现了一个新问题:帮助程序不再能够访问模板实例,例如rendered回调。这意味着用于在模板实例上维护状态的任何内容都不能由帮助程序完成。

有没有办法访问模板实例的状态以及使用反应式助手来触发Blaze中的DOM更新?

3 个答案:

答案 0 :(得分:21)

在最新版本中,您可以使用更方便的Template.instance()

答案 1 :(得分:12)

现在有Template.instance()允许您访问帮助程序中的模板实例。 e.g

Template.myTemplate.helpers({
    myvalue: function() {
        var tmpl = Template.instance();

        ...
    }
});

与reactiveDict一起,您可以使用它们传递渲染回调中设置的值。

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

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

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

答案 2 :(得分:0)

目前正在跟踪这是"首先要添加的内容之一"在0.8.0流星球中:

  

https://github.com/meteor/meteor/issues/1529

另一个相关问题是能够在呈现的回调中被动地访问数据,这首先避免了这个问题:

  

https://github.com/meteor/meteor/issues/2010