如何从 Meteor 0.8.0 Blaze 中的帮助程序访问模板实例

How to access template instance from helpers in Meteor 0.8.0 Blaze

本文关键字:访问 帮助程序 实例 Blaze Meteor      更新时间:2023-09-26

Meteor 0.8.0 中Template.foo.rendered回调的行为变化意味着,每当模板的内容发生变化时,我们都不会自动使用渲染的回调作为操作 DOM 的一种方式。实现此目的的一种方法是使用反应式帮助程序,如 https://github.com/avital/meteor-ui-new-rendered-callback。从理论上讲,反应式助手应该仅在相关项目发生变化时才触发来帮助性能。

但是,现在出现了一个新问题:帮助程序不再有权访问模板实例,就像以前的rendered回调一样。这意味着帮助程序无法完成用于维护模板实例上状态的任何操作。

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

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

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

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');
    }
});

这目前在 0.8.0 篇 Meteor 帖子中被跟踪为"首先要添加的内容之一":

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

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

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