0
我有一系列车辆范围。每个范围都有一组包含该范围内模型的VehicleModel。即Backbonejs - 在模型中过滤集合
骨干型号和款式:
App.Models.Range = Backbone.Models.extend({});
App.Collections.Ranges = Backbone.Collection.extend({
model: Range
});
JSON:
[{
"Name": "Range A",
"VehicleModels": [
{
"Name": "1.2",
"Fuel": "Petrol"
},
{
"Name": "1.3",
"Fuel": "Petrol"
},
{
"Name": "1.6",
"Fuel": "Petrol"
}
]
},
{
"Name": "Range B",
"VehicleModels": [
{
"Name": "x1",
"Fuel": "Diesel"
},
{
"Name": "x2",
"Fuel": "Diesel"
},
{
"Name": "x3",
"Fuel": "Diesel"
}
]
}]
如何过滤收集返回范围比与匹配过滤器条件属性VehicleModels。即返回具有燃料属性等于“汽油”的车辆模型的所有范围。很容易的通过模型筛选集合属性,如:
filterByFuel: function(fuel){
return this.models.where({'Fuel': fuel});
}
或
filterByFuel: function(fuel){
return this.models.filter(function(vehicle) {
return vehicle.get('Fuel') === fuel;
});
}
但需要搜索VehicleModel集合中的每个范围,并返回范围如果有匹配。
提示不胜感激。
编辑
我有这似乎以下工作的,但很好奇,如果有一个更好的办法。强调“包含”功能似乎是正确的,但不能得到它的工作:
所有骨干models = models.filter(function(range) {
if (_.where(range.get('VehicleModels'), { 'Fuel': params.fuel }).length > 0)
return range;
});
感谢您的答复:我有以下: 模型= models.filter(功能(范围){ 如果(_.where(range.get( 'VehicleModels'),{ '燃料' :params.fuel})长度> 0) 返回范围; }); 很好奇,如果有更好的方法 – Chev 2013-02-24 17:06:23
这是正确的,但你应该返回true或false而不是范围对象。 'contains'在这里不起作用 – neebz 2013-02-24 17:18:12