2013-07-18 10 views
6

ich folgende jsbin haben: http://jsbin.com/okoxim/4/editSortieren berechnete Eigenschaft auf einem Arraycontroller

filteredContent ist eine berechnete Eigenschaft, die meine Kontrolleurs Inhalte filtert. Ich möchte wissen, wie man die berechnete Eigenschaft sortiert und wie ich den Code, den ich habe, verbessern kann.

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

Antwort

8

Der einfachste Weg ist das Ergebnis in einem ArrayProxy zu wickeln, die auf den gleichen sortProperties Werten sortieren. So etwas wie,

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

Hier ist die aktualisierte jsbin.

Eine andere Möglichkeit ist, filteredContent eine explizite ArrayProxy zu machen und zu filtern/sortieren.

Verwandte Themen