2013-03-26 66 views
2

就像我读过的那样,Ember.js目前不支持在没有启用实验{{control}}助手的情况下拥有单个控制器的多个实例的概念。Ember.js具有多个主控视图

据我了解,在灰烬-Y的方式做一个排序列表是:在执行排序,一拉控制器定义属性:

App.BarController = Ember.ObjectController.extend({ 
    beers: (function() { 
    return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, { 
     sortProperties: ['rating'], 
     content: this.get('content.beers') 
    }) 
    }).property('content.beers') 
}); 

在我的应用程序,我想在酒吧中点按所有啤酒,并通过评级对这些啤酒进行分类。对于一个 bar,使用正常的主细节模式,这是非常简单的,给出App.BarController。但是,如果我想要并排显示两个酒吧,那么此模型会突然中断。我不能在{{each}}内使用{{render}}(因为render只能被调用一次),并且以下方案也会中断,因为数据绑定已更新为仅显示上一个

{{#each bar in controller}} 
    {{#with bar as controller}} 
    {{view BarView}} 
    {{/with}} 
{{/each}} 

最后,我不能只用{{view}}为消除按排名对数据进行排序的能力。该视图必须绑定到控制器或其他一些排序机制。

TL; DR:鉴于App.Beer一个App.BarhasMany情况下,用Ember.SortableMixin使得它可以直接创建一个排序列表。但是,如果我想同时显示两个App.Bar(为了进行比较),则此方法会中断,因为它需要两个实例App.BarController,这是不可能的。根据同一类的两个对象的内容获取两个排序列表的正确方法是什么?

回答

2

根据同一类的两个对象的内容得到两个排序列表的正确方法是什么?

一般你想坚持一个控制器每列表。所以在这种情况下,我会建议说有App.LeftBarControllerApp.RightBarController

当然会有共享代码,但可以重构为基类或混入。

+1

并且当有N多个实例? – 2013-03-27 14:52:49

+0

我也很好奇这将如何扩展到不确定数量的实例。 – Kerrick 2013-04-15 01:21:40

+0

我不认为我描述的方法能很好地适应n多个实例。在这种情况下,您可能会通过带有itemController =“App.BarController”的'{{each}} helper'遍历'n-Many'对象。 – 2013-04-15 02:16:12