我正在从一个与另一个模型有很多关系的模型属性构建表。我想实现排序功能,以便当用户单击列标题时,基础模式数据将根据该列映射到底层模型的内容进行排序,但我无法使其工作。我简单介绍了我尝试过的内容:http://jsfiddle.net/CMe28/4/
我在控制器上定义了一个属性:
analyticsRunParameters: (function() {
var sortColumn = this.get('sortColumn');
return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
sortProperties: [sortColumn],
//sortAscending: true,
content: this.get('content.analyticsRunParameters')
});
}).property('content.analyticsRunParameters')
这适用于初始加载,但我没有关于如何更新我希望稍后对数据进行排序的列的提示。似乎解决方案适用于arraycontroller,但我的主控制器是ObjectController。请告知在这种情况下可以采取哪些措施来实施分类。
谢谢, DEE
答案 0 :(得分:2)
最简单的方法是使用ArrayController
来控制analyticsRunParameters
,然后使用内置的sortProperties
。通过在模板中使用render
,您不仅可以使用模板,还可以使用控制器和视图(如果需要)。
因此,您可以执行以下操作,而不是在应用程序模板中循环analyticsRunParameters
:
{{render "analyticsRunParameters"}}
然后您的analyticsRunParameters
模板包含表格和循环。
然后你有控制器:
App.AnalyticsRunParametersController = Ember.ArrayController.extend({
sortProperties : 'category',
setSort : function(sort){
this.set('sortProperties',sort);
}
});
以下是对小提琴的修改:http://jsfiddle.net/k3p8s/
请注意,路径上使用setupController
挂钩来设置AnalyticsRunParametersController
的集合。
另请注意ApplicationController
:needs : ["analyticsRunParameters"]
。
答案 1 :(得分:1)
你对ArrayProxy的帮助对我来说很好,问题是你没有告诉属性观察sortColumn。如果您将代码更改为
analyticsRunParameters: (function() {
var sortColumn = this.get('sortColumn');
return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
sortProperties: [sortColumn],
//sortAscending: true,
content: this.get('content.analyticsRunParameters')
});
}).property('content.analyticsRunParameters', 'sortColumn')
然后你应该能够更新sortColumn(通过this.set('sortColumn')
或使其成为输入上的值绑定)并且可以使用。