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 方法:

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 回答