我有时会发现自己向多个模板声明了相同的数据。例如:
Template.auction_page.auctionDurations = function () {
return [ 30, 60, 120 ];
};
Template.auction_editor.auctionDurations = function () {
return [ 30, 60, 120 ];
};
我可以通过使用全局来改善它:
Template.auction_page.auctionDurations = function () {
return global.auctionDurations;
};
Template.auction_editor.auctionDurations = function () {
return global.auctionDurations;
};
但有没有办法完全摆脱声明?换句话说,默认情况下有没有办法将一些全局数据共享到多个模板?
答案 0 :(得分:5)
找到一个好的解决方案(在助手的帮助下!)。
您的全球:
global = _.extend({}, {
regions: [ "Americas", "Europe", "Asia" ]
}
帮助者:
Handlebars.registerHelper("global", function(name) {
return global[name];
});
现在您的所有模板都可以使用它:
<select>
{{#each global "regions"}}
<option>{{this}}</option>
{{/each}}
</select>
答案 1 :(得分:2)
使用辅助函数是一个非常好的通用解决方案。为了完整起见,您还可以进行简单的任务:
Template.auction_page.auctionDurations = Template.auction_editor.auctionDurations;
答案 2 :(得分:1)
您可以使用Session
:
Template.auction_page.auctionDurations = function() {
return Session.get("auctionDurations");
}
Template.auction_editor.auctionDurations = function() {
return Session.get("auctionDurations");
}
使用Session的一个好处是,因为它是一个被动数据源,所以设置它将导致所有依赖它的模板被重新渲染。因此,只要您致电Session.set("auctionDurations", [ 30, 60, 120 ]);