0

私はしばらくの間、次の質問に苦労してきました: hasMany 関係で itemController を子要素に割り当てるにはどうすればよいですか?

私の使用例は次のとおりです。Google Maps API を使用して地図上の領域を操作する Ember.View (ProjectView) があります。エリアのモデルとプロジェクト モデルの「hasMany」エリアがあります。

アプリには保存ボタンなどはありませんが、変更が発生したときに変更をバックエンドに同期します (デバウンス機能を使用)。厄介な inFlight エラーを回避するために、私は Ember.AutoSaving プラグインhttps://github.com/gaslight/ember-auto Saving の修正版を使用しています。これは変更をバッファリングし、準備が整ったときにモデルと同期します。ただし、これを使用するには、この Mixin を使用して itemController を hasMany リレーションのすべてのエリアに適用する必要があります。どうすればいいですか?

4

1 に答える 1

3

Handlebars{{each}}ヘルパーにはitemControllerオプションがあります。このオプションを指定すると、各オブジェクトはコントローラ インスタンスによってラップされます。したがって、次のようなものが機能するはずです。

//from your project template
{{#each area in areas itemController="area"}}
  <pre>
    area is an AreaController: {{area}}
    area.content is a reference to the model: {{area.content}}
{{/each}}

詳細については、[handlebars {{each}} API ドキュメント] ( http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_each ) を参照してください。

編集: オプション 2

{{each}}ヘルパーを使用する代わりに、 を使用ArrayControllerしてコレクションを表し、そのプロパティを設定しitemControllerます。例えば:

App.AreasController = Ember.ArrayController.extend({
  itemController: 'area'
});

App.AreaController = Ember.ObjectController.extend( Ember.AutoSaving, {
  bufferedFields: ['title', 'body'],
  instaSaveFields: ['postedAt', 'category'],
  titleLength: function() {
    return this.get('title').length;
  }.property('title')
});

// In your project route:
setupController: function(controller, model) {
  this.controllerFor('areas').set('content', model.areas);
}

これで、エリア コントローラーは各アイテムを AreaController プロキシーにラップします。

Ember ArrayController API ドキュメントを参照してください

于 2013-08-22T04:40:54.453 に答える