2013-03-09 10 views
8

Di seguito sto filtrando per una singola proprietà, ma come faccio a filtrarla con un'altra in una volta? Cioè, senza fornire all'utente un menu a discesa contenente opzioni di ricerca differenti Esempio: Il mio termine di ricerca potrebbe essere il nome, l'indirizzo email o l'età.Emberjs: Come filtrare da più di una proprietà in una volta

Quanto sopra funziona correttamente per l'aggiornamento dell'elenco principale, ma sono in grado di filtrare solo per una proprietà alla volta.

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

Un pensiero è quello di ri-filter di nuovo se il filtro risulta length = 0 e in qualche modo unire i risultati. Tuttavia, non sono grande su questa idea e credo che Ember possa avere un modo migliore - più elegante per raggiungere questo obiettivo.

risposta

8

È possibile utilizzare la funzione filter per filtrare più proprietà nel modello e persino utilizzare altre proprietà dal controller. Per esempio:

immaginare un modello come questo:

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

per filtrare per più proprietà, diciamo che dispone di un controller con una funzione di ricerca simile a questo:

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

Questo scorrerà l'elenco dei contatti in content e applicherà uno o più filtri, restituendo solo gli oggetti del modello che corrispondono al filtro.

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

+0

mi mancava solo il 'filtro (fn)'. Bello un MWJ. – KALBB

+0

Non lo sapevo, ma anche 'observ ('firstName', 'lastName')' funziona. – rxgx

Problemi correlati