나는 Vehicle Ranges 컬렉션을 가지고 있습니다. 각 Range에는 해당 범위의 모델을 포함하는 VehicleModels의 배열이 있습니다. 즉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
이것은 정확하지만 range 객체 대신 true 또는 false를 반환해야합니다. '포함 '은 여기서 작동하지 않습니다. – neebz