2011-06-22 120 views
6

我有一個Backbone.Collection充滿模型;讓我們說這個模型是Car。這個集合是一個偉大的大列表Cars。我希望能夠從列表中選擇幾個特定的​​車輛ID,然後才能從這個集合中獲得所選的車輛對象。Backbone.js:如何通過模型ID數組篩選對象集合?

我的代碼塊下面不工作;我確定有一種方法可以用Backbone.js/Underscore.js來做到這一點......我對Backbone/Underscore也很新鮮。

CarList = Backbone.Collection.extend({ 
    model: Car, 
    filterWithIds: function(ids) { 
     return this.filter(function(aCar) { return _.contains(ids, car.id); } 
    } 
}); 

任何指針?

+1

傳遞給'this.filter'的匿名函數缺少返回語句。與其他一些語言(例如Ruby)不同,JavaScript不使用函數中的最後一個表達式作爲默認返回值。 (另外,將'this'分配給'coll'的行是多餘的。) –

+0

你是對的,Niall ...我是用眼球來翻譯我的代碼,並且把它留下了;並在簡化我的代碼,我不小心留下了冗餘線。我已經修復了我的代碼示例。 –

回答

12

好的,我想我已經明白了。它接近我的原始代碼塊,但更新的filterWithIds函數在這裏。

filterWithIds: function(ids) { 
    return _(this.models.filter(function(c) { return _.contains(ids, c.id); })); 
} 

對於那些在CoffeeScript(我)的人來說,這裏是CoffeeScript版本。

filterWithIds: (ids) -> _(@models.filter (c) -> _.contains ids, c.id) 

這是我的答案;任何代碼味道?

+2

而不是使用include,你可以嘗試'c.id in ids'這個條件,將coffeescript變成一個for循環來檢查每個id對c.id. – c3rin

+3

自從這個答案發布後,'include'被重命名爲'contains'。 – hughes

+0

謝謝,@ hughes。固定! –