使用hasMany关系对ember中的模型数据进行排序

时间:2013-09-13 18:53:01

标签: ember.js ember-data

我正在从一个与另一个模型有很多关系的模型属性构建表。我想实现排序功能,以便当用户单击列标题时,基础模式数据将根据该列映射到底层模型的内容进行排序,但我无法使其工作。我简单介绍了我尝试过的内容: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

2 个答案:

答案 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的集合。

另请注意ApplicationControllerneeds : ["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')或使其成为输入上的值绑定)并且可以使用。