【发布时间】:2013-02-09 19:54:25
【问题描述】:
我有一系列车辆范围。每个 Range 都有一个 VehicleModels 数组,其中包含该范围内的模型。即
主干模型和集合:
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"
}
]
}]
如何过滤集合以返回范围而不是具有与过滤条件匹配的属性的 VehicleModel。即返回具有燃料属性等于“汽油”的车辆模型的所有范围。很容易通过模型属性过滤集合,例如:
filterByFuel: function(fuel){
return this.models.where({'Fuel': fuel});
}
或
filterByFuel: function(fuel){
return this.models.filter(function(vehicle) {
return vehicle.get('Fuel') === fuel;
});
}
但需要在每个Range中搜索VehicleModel集合,如果匹配则返回Range。
非常感谢提示。
编辑
我有以下似乎可行的方法,但很好奇是否有更好的方法。下划线“包含”功能似乎是正确的,但无法使其工作:
models = models.filter(function(range) {
if (_.where(range.get('VehicleModels'), { 'Fuel': params.fuel }).length > 0)
return range;
});
【问题讨论】: