如何访问控制器中每个块的当前项以获取视图

时间:2013-01-10 04:55:56

标签: ember.js

鉴于此控制器:

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

并将一个init方法添加到SubItemView类:

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

我可以访问控制器中的subItem。然而,这比我可以计算的更多级别感觉不对。

2 个答案:

答案 0 :(得分:0)

有趣......在浏览时,我发现了这一点:https://stackoverflow.com/a/14251255/489116。它与您提出的问题略有不同,但可以解决问题:如果我正确读取它,它会自动将subItemController与每个subItemView和subItem相关联,而不必传递模型。虽然尚未发布。我还是希望看到其他解决方案!

答案 1 :(得分: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}}