【问题标题】:How to reference {{outlet}} in Ember.CollectionView's itemView如何在 Ember.CollectionView 的 itemView 中引用 {{outlet}}
【发布时间】:2013-10-19 11:49:32
【问题描述】:

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

我尝试使用:

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

在item Route内,但不知道如何引用collectionview item模板。

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

    这里有一个要点,展示了如何设置路由器、路由、控制器和模板:

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

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

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

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

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

    【讨论】:

    • 嗨,我按照你的例子,从而更好地理解了这个问题:在你的例子中,你也有循环外的出口,我需要一个循环内的出口。感谢您的示例,我发现了这个:stackoverflow.com/questions/13925233/…
    【解决方案2】:

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

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

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

    【讨论】:

    • 您好,感谢您的回答,是的,我尝试排除该参数,但没有奏效。我需要一条额外的路线,但只想将更多内容加载到现有元素中。不过,我更好地理解了我的需要:我需要在每个循环中都有一个出口,请参阅我对另一个答案的评论......
    猜你喜欢
    • 2013-07-06
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    相关资源
    最近更新 更多