2011-09-07 85 views
0

所以我已經得到了這個工作使用循環,但想知道是否有一個更乾淨的方式來做到這一點。使用backbone.js中id的數組過濾返回集合列表

基本上,我得到了一個模型,從另一個模型中獲取了一個ID數組,目前我循環每個ID並將手動模型添加到在模型集合上使用此過濾器的新集合。

getOneById : function(id){ 
    return this.filter(function(data) { 
     return data.get("id") == id; 
    }); 
}, 

有沒有辦法直接返回一個列表做這樣的事情

getAllById : function(arrayIds){ 
    return _(this.filter(function(data) { 
     ??????? return data.get("id") == eachID; 
    })); 
}, 

謝謝!

回答

4

,你可以通過檢查,看看你的對象的ID是索引> -1陣列中的減少循環:

function(arrayIds){ 
    var models = _.select(collection, function(model){ 
    return (_.indexOf(arrayIds, model.id) > -1); 
    }); 
    return models; 
} 

這需要underscore.js在你的代碼中包含的,但既然你已經在使用骨幹,你已經有了。

+0

工作出色 –

+2

我覺得應該讀作collection.models'而不是'collection' – Alp

0

我的解決辦法:

收集(Backbone.Collection)和arrayIds

var collection2 = new Backbone.Collection(); 
collection2.add(collection.models.filter(function(model){ 
    return arrayIds.indexOf(model.id) !== -1; 
})); 

四行:d

console.assert(collection2.length === arrayIds.length) //OK