0

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

我有一个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}} 中。虽然我可以将“item”路由的内容加载到例如application.hbs 的出口中,但我不知道如何引用所选collectionView 项目的出口,以便在现有视图中显示详细内容。

我尝试使用:

this.render('item', {
            outlet: 'detail',
            into: '????'
        });

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

也许还有一种更简单的方法可以从项目视图中的项目加载更多数据(同时更改路线)。任何帮助,将不胜感激。

4

2 回答 2

0

你为什么不直接转换到'item.details',删除命名的出口,将其更改为出口,并在你的资源下添加一个路由。

然后 Ember 负责决定渲染什么以及在哪里渲染。对于一个可能不存在的组件,命名的 outlet 似乎有点复杂(如果它可以工作的话)。

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

于 2013-10-19T03:22:30.113 回答
0

你真正想做的不是使用 Ember.CollectionView,而是在你的路由器中有一个用于 MyItems 的资源,然后有两个路由:App.MyItemsIndexRoute 和 App.MyItemsRoute。

下面是一个要点,展示了如何设置路由器、路由、控制器和模板:

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

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

Ember 模板非常强大,您很少需要使用视图。请参阅 ember 视图指南。

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

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

于 2013-10-19T03:49:32.187 回答