2013-03-09 5 views
8

Unten bin ich durch eine einzelne Eigenschaft sicher, aber wie filtere ich durch einen anderen auf einmal? Das heißt, ohne dem Benutzer eine Dropdown-Liste mit verschiedenen Suchoptionen zu liefern. Beispiel: Mein Suchbegriff ist vielleicht Name, E-Mail oder Alter.Emberjs: Wie man durch mehr Eigenschaft auf einmal filtert

var search = this.controllerFor('employees').search; //can be name, email or age 

employees = this.get('currentModel').filterProperty('name', search); 

Das obige funktioniert gut für die Aktualisierung der Master-Liste, aber ich bin nur in der Lage, nach einer Eigenschaft zu einem Zeitpunkt zu filtern.

//Sample Model 
App.Employee = DS.Model.extend({ 
    email: DS.attr('string'), 
    name: DS.attr('string'), 
    age: DS.attr('number'), 
}) 

Ein Gedanke ist wieder-Filter erneut, wenn der Filter length = 0 und einige Ergebnisse, wie die Ergebnisse zusammenführen. Jedoch bin ich nicht groß bei dieser Idee und glaube, dass Ember einen besseren - eleganteren Weg hat, dies zu erreichen.

Antwort

8

Sie können die Funktion filter verwenden, um mehr als eine Eigenschaft in Ihrem Modell zu filtern und sogar andere Eigenschaften vom Controller zu verwenden. Zum Beispiel:

ein Modell wie folgt vorstellen:

App.Person = DS.Model.extend({ 
    firstName: DS.attr('string'), 
    lastName: DS.attr('string'), 
    fullName: function() { 
     return '%@ %@'.fmt(
      this.get('firstName'), 
      this.get('lastName') 
     ); 
    }.property('firstName', 'lastName') 
}); 

durch mehrere Eigenschaften zu filtern, sagen wir mal Sie einen Controller mit einer Suchfunktion haben ähnlich dazu:

... 
performSearch: function(searchTerm) { 
    return this.get('content').filter(function(person) { 
     return person.get('firstName').indexOf(searchTerm) !== -1 || 
       person.get('lastName').indexOf(searchTerm) !== -1; 
    }); 
}, 
... 

Diese Durchläuft die Liste der Kontakte in content und wendet einen oder mehrere Filter an und gibt nur die Modellobjekte zurück, die dem Filter entsprechen.

Fiddle: http://jsfiddle.net/schawaska/ABJN7/

+0

ich nur fehlte die 'Filter (fn)'. Nett ein MWJ. – KALBB

+0

Ich wusste das nicht, aber 'beobachten ('firstName', 'lastName')' funktioniert auch. – rxgx

Verwandte Themen