2013-03-09 23 views
8

Eminim tek bir özellik göre filtreleme am Aşağıda birden fazla özellik göre filtrelemek için, ama nasıl gitmem birinde başka biri tarafından filtre uygularım? Diğer bir deyişle, kullanıcılara farklı arama seçenekleri içeren bir aşağı açılır menü sağlanmadıkça,Örnek: Arama terimim ad, e-posta veya yaş olabilir.Emberjs: Nasıl bir kez

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

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

yukarıdaki ana listesini güncellemek için ince işler ancak bir seferde bir özelliğiyle filtreleyebiliyoruz duyuyorum.

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

Bir düşünce yeniden filtreyi tekrar filtre sonuçlarını birleştirme nasıl length = 0 ve bazı sonuçları ise olduğunu. Ancak, bu fikrimde büyük değilim ve Ember'in bunu başarmanın daha iyi ve daha zarif bir yoluna sahip olabileceğine inanıyorum.

cevap

8

Eğer modelde birden fazla özellik filtrelemek için filter işlevini kullanın ve hatta denetleyici diğer özelliklerini kullanabilirsiniz. Örneğin:

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

Bu:

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

Diyelim ki bir arama fonksiyonu buna benzer ile bir denetleyici var diyelim, birden çok mülkü göre filtrelemek için:

böyle bir model düşünün content'daki kişiler listesinde yinelenecek ve yalnızca filtreye karşılık gelen model nesnelerini döndüren bir veya daha fazla filtre uygulayacaktır.

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

+0

Sadece 'filtreyi (fn)' eksikti. Güzel bir MWJ. – KALBB

+0

Bunu bilmiyordum, ama 'gözlemlemek ('firstName', 'lastName')' de çalışır. – rxgx