1

このコントローラーを考えると:

ItemController= Ember.Controller.extend({
    subItems: Ember.ArrayController.create({
        content: App.store.find(App.models.SubItem),
        sortProperties: ['name']
    }),

    currentItemIdBinding: 'App.router.mainController.currentItemId',

    item: function() {
        return App.store.find(App.models.SubItem, this.get('currentItemId'));
    }.property('currentItemId'),

    currentSubItems: function () {
        return this.get('subItems.content')
                   .filterProperty('item_id', this.get('item.id'));
    }.property('item', 'subItems.@each')
});

テンプレート内のこの各ブロック:

{{#each subItem in currentSubItems}}
    {{view App.SubItemView}}
{{/each}}

SubItemViewのコントローラーの「subItem」にアクセスするにはどうすればよいですか?

編集:

私はこれを行う方法に出くわしました。各ブロックを少し変更すると:

{{#each subItem in currentSubItems}}
    {{view App.SubItemView subItemBinding="subItem"}}
{{/each}}

そして、初期化メソッドをSubItemViewクラスに追加します。

init: function() {
    this._super();
    this.set('controller', App.SubItemController.create({
        subItem: this.get('subItem')
    }));
})

コントローラのsubItemにアクセスできます。しかし、これは私が数えることができるよりも多くのレベルで間違っていると感じています。

4

2 に答える 2

0

ヘルパーのEmber.CollectionView代わりに使用する方法については、次を参照してください。{{each}}

App.SubItemsView = Ember.CollectionView.extend({
  contentBinding: "controller.currentSubItems",
  itemViewClass: Ember.View.extend({
    templateName: "theTemplateYouUsedForSubItemViewInYourQuestion",
    controller: function(){
      App.SubItemController.create({subItem: this.get("content")});
    }.property()
  })
})

次のようにハンドルバーで使用します

{{collection App.SubItemsView}}
于 2013-01-11T22:08:54.963 に答える
0

興味深い... https://stackoverflow.com/a/14251255/489116を見つけました。あなたが求めているものとは少し異なりますが、問題を解決する可能性があります。正しく読んでいれば、モデルを渡すことなく、subItemController が各 subItemView および subItem に自動的に関連付けられます。まだリリースされていませんが。私はまだ他の解決策を見たいです!

于 2013-01-10T12:31:33.167 に答える