2016-02-07 49 views
2

我想通過一個模型的屬性(名稱),以篩選集合的集合,骨幹過濾器集合按名稱返回模型?

byName: function(searchParam) { 
    var filtered = this.filter(function(model){ 
     console.log(model.get('name').toLowerCase()); 
     console.log(searchParam.toLowerCase()); 
     if(model.get('name').toLowerCase().indexOf(searchParam.toLowerCase()) !== -1) { 
      model.trigger('show'); 
     } else { 
      model.trigger('hide'); 
     } 
    }); 
} 
我雖然有一個小問題

,此刻我的搜索參數只是簡單的「一」。因此它應該返回所有帶有「a」名稱的模型。

但是我有兩個模型,應該返回這些名稱是「abba」和「AAAS」。我假設「AAAS」沒有被返回,因爲我的搜索條件是小寫,模型名稱是大寫,所以我添加了.toLowerCase(),但它仍然只返回「abba」爲什麼?

+1

我做了一個[jsfiddle](https://jsfiddle.net/xemn0otk/1/),你的代碼返回abba和AAAS。就我所知,這個問題是另一回事。 – ourmandave

回答

1

_.filter文件(骨幹Collection.filter使用它),你的filtered陣列應該是空的 - 它應該只包含元素,謂語返回truthy價值 - 你的函數返回undefined這是falsy值。試試這個:

... 
if(model.get('name').toLowerCase().indexOf(searchParam.toLowerCase()) !== -1) { 
    model.trigger('show'); 
    return true; 
} else { 
    model.trigger('hide'); 
} 
... 

現在filtered應該包含searchParam所有車型中它的name(不區分大小寫)。

+2

值得一提的是,如果你不需要在'byName(...)'方法的其餘部分中'過濾'模型數組,你最好使用'each(...)''方法。即'this.each(function(model){...}'。 –