您可以跨多个模板共享数据吗?

Dav*_*ave 5 javascript handlebars.js meteor

我有时发现自己向多个模板声明了相同的数据.例如:

Template.auction_page.auctionDurations = function () {
  return [ 30, 60, 120 ];
};

Template.auction_editor.auctionDurations = function () {
  return [ 30, 60, 120 ];
};
Run Code Online (Sandbox Code Playgroud)

我可以通过使用全局来改善它:

Template.auction_page.auctionDurations = function () {
  return global.auctionDurations;
};

Template.auction_editor.auctionDurations = function () {
  return global.auctionDurations;
};
Run Code Online (Sandbox Code Playgroud)

但有没有办法完全摆脱声明?换句话说,默认情况下有没有办法将一些全局数据共享到多个模板?

Dav*_*ave 5

找到了一个很好的解决方案(在Helper的帮助下!).

你的全球:

global = _.extend({}, {
  regions: [ "Americas", "Europe", "Asia" ]
}
Run Code Online (Sandbox Code Playgroud)

帮助者:

Handlebars.registerHelper("global", function(name) {
    return global[name];
});
Run Code Online (Sandbox Code Playgroud)

现在您的所有模板都可以使用它:

<select>
  {{#each global "regions"}}
  <option>{{this}}</option>
  {{/each}}
</select>
Run Code Online (Sandbox Code Playgroud)