我正在使用模板级订阅,但在子模板中使用结果时遇到一些问题:
当我加载模板example
时,将显示模板exampleChild
(仅以此为基本示例 - 我知道现在没有意义)。
在创建主模板时,订阅完成,数据存储在帮助程序中:
模板
<template name="example">
{{> Template.dynamic template=switch}}
</template>
<template name="exampleChild">
<h1>{{result}}</h1>
</template>
辅助
Template.example.helpers({
switch: function() { return 'exampleChild'; },
result: function() { return Template.instance().result(); },
});
事件
Template.example.onCreated(function() {
var instance = this;
instance.autorun(function () {
var subscription = instance.subscribe('posts');
});
instance.result = function() {
return Collection.findOne({ _id: Session.get('id') });
}
});
如果我将{{result}}
放在example
- 模板中,一切正常。但我需要在子模板中使用该变量。
答案 0 :(得分:0)
您可以将结果存储在会话变量中,然后向等待会话变量的exampleChild
添加另一个帮助程序。
答案 1 :(得分:0)
你有没有尝试过:
<template name="example">
{{#with result}}
{{> Template.dynamic template=switch}}
{{/with}}
</template>
<template name="exampleChild">
<h1>{{this}}</h1>
</template>
当这样做时,我更喜欢将数据上下文结果包装到一个对象中,以便在孩子身上找到合适的东西,如:
Template.example.helpers({
switch: function() { return 'exampleChild'; },
data: function() { return {result: Template.instance().result()} },
});
<template name="example">
{{#with data}}
{{> Template.dynamic template=switch}}
{{/with}}
</template>
<template name="exampleChild">
<h1>{{result}}</h1>
</template>
希望有所帮助