如何在Ember.CollectionView的itemView中引用{{outlet}}

时间:2013-10-18 21:58:05

标签: ember.js

我是新手,遇到问题并无法在线找到答案。

我有一个collectionView

App.MyView = Ember.CollectionView.extend({
    itemViewClass: 'App.MyViewItem',
    contentBinding: 'controller'
});

和itemViewClass

App.MyViewItem = Ember.View.extend({
    templateName: 'mytemplate'
});

模板看起来像这样:

<div {{action 'select' view.content}}>{{view.content.name}}</div>
        {{outlet detail}}
</div>

这样可以很好地生成内容列表。

在控制器中,我有一个动作:

select: function(evt){
            this.transitionToRoute('item', evt);
        }

我想要做的是在选择项目(工作正常)时转换到嵌套路线,并将所选项目的更多数据加载到{{outlet detail}}。虽然我可以将“项目”路线的内容加载到例如application.hbs,我不知道如何引用所选collectionView项的插座,以便在现有视图中显示详细内容。

我试图使用:

this.render('item', {
            outlet: 'detail',
            into: '????'
        });
项目路径中的

,但我不知道如何引用collectionview项目模板。

也许还有一种更容易的方法是从项目视图中的项目加载更多数据(同时更改路径)。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

为什么不直接转换到'item.details',删除指定的插座,将其更改为插座,并在您的资源下添加路由。

然后,恩伯完成了决定渲染什么和在哪里的重任。对于可能不存在的组件,命名出口似乎有点复杂(如果它可以工作)。

作为旁注,您是否尝试排除into参数,或者说:'mytemplate'?

答案 1 :(得分:0)

你真正希望在这里做的不是使用Ember.CollectionView,而是在你的路由器中有MyItems的资源,然后有两条路线:App.MyItemsIndexRoute和App.MyItemsRoute。

这是一个要点,说明如何设置路由器,路由,控制器和模板:

https://gist.github.com/anonymous/7051432

对于要点中的示例,我们的“项目”是项目。

Ember模板非常强大,您很少需要使用视图。 See ember guides on views.

  

Ember.js中的视图通常仅出于以下原因创建:

     

当您需要复杂的用户事件处理时   创建一个可重用的组件