Create/modify 运行时的 Meteor 模板
Create/modify Meteor templates at runtime
我想知道如何解决这个问题:
我有一个模板,其中包含一些文本和一些模板助手:
<template>Hello {{who}}, the wheather is {{weather}}</template>
现在我需要在运行时动态更改模板的内容,同时保持辅助功能。例如我需要这样:
<template>Oh, the {{weather}}. Good evening {{who}}</template>
文本发生变化,不同位置需要助手。想一想一个应用程序,用户可以在其中创建自定义表单,其中包含某些变量的占位符,例如填写表单的用户的姓名。基本上,模板的内容存储在一个mongo文档中,需要在运行时将其转换为模板,或者需要更改现有模板。
如何解决这个问题?我可以在运行时更改模板的内容吗?
只需让一个助手动态构建整个字符串(记住 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)。
要解决此用例,您需要使用两种技术。
首先你需要能够改变模板反应。为此,您可以使用 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,文章本身进行了更详细的介绍。阅读本文后,您将掌握完成任务所需的知识...
我想知道如何解决这个问题:
我有一个模板,其中包含一些文本和一些模板助手:
<template>Hello {{who}}, the wheather is {{weather}}</template>
现在我需要在运行时动态更改模板的内容,同时保持辅助功能。例如我需要这样:
<template>Oh, the {{weather}}. Good evening {{who}}</template>
文本发生变化,不同位置需要助手。想一想一个应用程序,用户可以在其中创建自定义表单,其中包含某些变量的占位符,例如填写表单的用户的姓名。基本上,模板的内容存储在一个mongo文档中,需要在运行时将其转换为模板,或者需要更改现有模板。
如何解决这个问题?我可以在运行时更改模板的内容吗?
只需让一个助手动态构建整个字符串(记住 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)。
要解决此用例,您需要使用两种技术。
首先你需要能够改变模板反应。为此,您可以使用 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,文章本身进行了更详细的介绍。阅读本文后,您将掌握完成任务所需的知识...