6

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

filtersContent 是一个计算属性,用于过滤我的 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')
});
4

1 回答 1

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')

这是更新的jsbin

另一种方法是对其进行filteredContent显式ArrayProxy过滤/排序。

于 2013-07-18T04:38:39.777 回答