5

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

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;
};

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

4

3 回答 3

5

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

您的全球:

global = _.extend({}, {
  regions: [ "Americas", "Europe", "Asia" ]
}

帮手:

Handlebars.registerHelper("global", function(name) {
    return global[name];
});

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

<select>
  {{#each global "regions"}}
  <option>{{this}}</option>
  {{/each}}
</select>
于 2012-12-22T17:28:35.237 回答
2

使用辅助函数是一个很好的通用解决方案。为了完整起见,您还可以做一个简单的分配:

Template.auction_page.auctionDurations = Template.auction_editor.auctionDurations;
于 2012-12-23T03:40:54.160 回答
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 ]);

于 2012-12-22T12:40:40.427 回答