1

我正在从与另一个模型有很多关系的模型属性构建表。我想实现排序功能,以便当用户单击列标题时,基础模式数据会根据该列在基础模型中映射到的内容进行排序,但我无法正常工作。我尝试了一个 jsfiddle: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。请告知在这种情况下可以采取哪些措施来实施排序。

谢谢,迪

4

2 回答 2

2

最简单的方法是使用 anArrayController来控制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"]

于 2013-09-14T05:07:18.463 回答
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')或使其成为输入上的值绑定)并进行处理。

于 2014-06-20T21:00:07.547 回答