2013-07-18 45 views
6

Tôi có các jsbin sau: http://jsbin.com/okoxim/4/editSắp xếp thuộc tính được tính trên một ArrayController

filtersContent là thuộc tính được tính toán lọc nội dung của Bộ điều khiển của tôi. Tôi muốn biết cách sắp xếp thuộc tính được tính toán và bất kỳ cách nào tôi có thể cải thiện mã tôi có.

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

Trả lời

8

Cách dễ nhất là để bọc kết quả trong một ArrayProxy mà loại trên sortProperties cùng giá trị. Một cái gì đó như,

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

Đây là cập nhật jsbin.

Một cách khác là tạo filteredContent rõ ràng ArrayProxy và lọc/sắp xếp trên đó.

Các vấn đề liên quan