我有以下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')
});
答案 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}}并对其进行过滤/排序。