我想知道如何解决这个问题:
我有一个模板,其中包含一些文本,其中包含一些模板助手:
<template>Hello {{who}}, the wheather is {{weather}}</template>
现在我需要在运行时动态更改模板的内容,同时保持辅助功能。例如,我需要这样:
<template>Oh, the {{weather}}. Good evening {{who}}</template>
文本发生变化,不同位置需要助手。考虑一个应用程序,用户可以使用占位符为某些变量创建自定义表单,例如填写表单的用户的名称。基本上,模板的内容存储在mongo文档中,需要在运行时转换为模板,或者需要更改现有模板。
如何处理?我可以在运行时更改模板的内容吗?
答案 0 :(得分:1)
要解决此用例,您需要使用两种技术。
首先,您需要能够更改模板的反应性。为此,您可以使用Template.dynamic
。例如:
{{> Template.dynamic template=helperToReturnName [data=data] }}
见这里:http://docs.meteor.com/#/full/template_dynamic
现在您可以更改模板,您需要能够从数据库内容中动态创建新模板。这是非常重要的,但是如果您愿意编写代码来创建它们,这是可能的,例如:
Template.__define__("postList", (function() {
var view = this;
return [
HTML.Raw("<h1>Post List</h1>\n "),
HTML.UL("\n ", Blaze.Each(function() {
return Spacebars.call(view.lookup("posts"));
},
function() {
return [ "\n ", HTML.LI(Blaze.View(function() {
return Spacebars.mustache(view.lookup("title"));
})), "\n " ];
}), "\n ")
];
}));
该代码段取自Meteorhacks上的this article,文章本身更详细。阅读完文章后,您将获得完成任务所需的知识......
答案 1 :(得分:0)
只需让助手动态构建整个字符串(记住 this 指的是当前数据上下文):
Template.foo.helpers({
dynamicString: function(switch){
if ( switch == 1) return "Hello "+this.who+", the wheather is "+this.weather;
else return "Oh, the "+this.weather+". Good evening "+this.who;
}
});
然后在你的模板中:
<template name="foo">
{{dynamicString}}
</template>
或者,只需使用{{#if variable}}或{{#unless variable}}块来更改模板中的逻辑。更简单。
<template name="foo">
{{#if case1}}
Hello {{who}}, the wheather is {{weather}}
{{else}}
Oh, the {{weather}}. Good evening {{who}}
{{/if}}
</template>
您总是可以使用模板助手来计算必要的布尔变量(例如 case1 )。