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

良い解決策を見つけました(ヘルパーの助けを借りて!)。

あなたのグローバル:

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がリアクティブなデータソースであるため、Sessionを設定すると、それに依存するすべてのテンプレートが再レンダリングされることです。そのため、電話をかけるとすぐにオークション期間が更新されますSession.set("auctionDurations", [ 30, 60, 120 ]);

于 2012-12-22T12:40:40.427 に答える