在ArrayController上对计算属性进行排序

时间:2013-07-18 00:34:07

标签: ember.js

我有以下jsbin:http://jsbin.com/okoxim/4/edit

filteredContent是一个计算属性,用于过滤Controller的内容。我想知道如何对计算属性进行排序以及我可以改进代码的任何方法。

App.StudentsController = Ember.ArrayController.extend({
  sortProperties: ['name'],
  nameFilter: null,
  filteredContent: function(){
    if(!this.get('nameFilter')) return this.get('content');

    var nameRegEx = new RegExp(this.get('nameFilter'), 'i');
    return this.filter(function(item) {
      return item.get('name').search(nameRegEx) !== -1;
    });
  }.property('nameFilter', '@each.name')
});

1 个答案:

答案 0 :(得分:8)

最简单的方法是将结果包装在ArrayProxy中,该sortProperties对相同的filteredContent: function(){ var result; if (!this.get('nameFilter')) { result = this.get('content'); } else { var nameRegEx = new RegExp(this.get('nameFilter'), 'i'); result = this.filter(function(item) { return item.get('name').search(nameRegEx) !== -1; }); } var sortedResult = Em.ArrayProxy.createWithMixins( Ember.SortableMixin, { content:result, sortProperties: this.sortProperties } ); return sortedResult; }.property('nameFilter', '@each.name') 值进行排序。像,

filteredContent

这是更新后的jsbin

另一种方法是使ArrayProxy成为明确的{{1}}并对其进行过滤/排序。