2013-07-18 36 views
6

我有以下jsbin计算性能:http://jsbin.com/okoxim/4/edit排序上ArrayController

filteredContent是这是我的过滤器的内容的计算性能。我想知道如何对计算属性进行排序,以及如何改进我所拥有的代码。

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

回答

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和筛选/排序。