从Meteor中的帮助程序访问原始的TemplateInstace

时间:2015-02-15 14:20:05

标签: meteor meteor-helper

有人能指出我如何从流星助手访问原始 TemplateInstance。我知道Template.instance()但它似乎返回了帮助器被称为的模板实例,而不是帮助器定义的模板实例

想象一下,我们有两个小模板:

<template name='demo'>
  <h1>{{helper}}</h1>
  {{# border}}
    <h2>{{helper}}</h2>
  {{/border}}
</template>

<template name='border'>
  <div style="border:1px solid red">
    {{> UI.contentBlock}}
  </div>
</template>

具有以下行为:

Template.demo.created = function() {
  this.result = "OK";
}

Template.demo.helpers({
  helper: function() {
    var tmpl = Template.instance();
    return tmpl.result || "FAILED";
  }
});

我预计会获得两个&#34; OK&#34;对于demo模板:第二个应该在红色边框中。但是,由于Template.instance()仅在其所有者模板的顶层调用helper时才返回原始TemplateInstance,结果为&#34; FAILED&#34; (当然是红色边框)。

问题:是否有公开 api来获取原始TemplateInstance(无需遍历view/parentView/_templateInstace)?

3 个答案:

答案 0 :(得分:0)

我认为您的主要问题是您没有正确设置模板实例变量。请尝试以下代码...

设置实例变量:

Template.instance().result.set("OK");

获取实例变量:

Template.instance().get("result");

所以你的更新代码是:

Template.demo.created = function() {
    Template.instance().result.set("OK");
}

Template.demo.helpers({
    helper: function() {
        return Template.instance().get("result") || "FAILED";
    }
});

答案 1 :(得分:0)

我认为最好的方法可能是设置Session变量,或使用Reactive Variable(使用reactive-var包 - here is the documentation)。

我制作了一个流星垫,以显示更多 - here

基本上:

Template.demo.created = function() {
    result = new ReactiveVar('OK');
}

Template.demo.helpers({
    helper: function() {
        return result.get() || "FAILED";
    }
});

答案 2 :(得分:0)

它似乎已知并且已经修复(?)Meteor bug。更多信息:https://github.com/meteor/meteor/issues/3745

来自rclai的关于GitHub的评论:

  

此问题已在下一版本中得到解决和修复。

     

像这样运行流星,不确定它是否仍然有效:   meteor --release TEMPLATE-CURRENT-DATA@0.0.1

     

另一种选择是使用aldeed:template-extensions,它具有超级好的功能,特别是在处理模板实例时,我相信他们获取模板实例的方法是解决这个问题。