有人能指出我如何从流星助手访问原始 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
)?
答案 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
,它具有超级好的功能,特别是在处理模板实例时,我相信他们获取模板实例的方法是解决这个问题。