【问题标题】:Backbonejs - filtering collections within modelsBackbonejs - 过滤模型中的集合
【发布时间】: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;
            });

【问题讨论】:

    标签: backbone.js underscore.js


    【解决方案1】:

    首先,Backbone 不会将嵌套对象视为单独的集合。它们只是数组。

    所以当你这样做时:

    this.model.get("VehicleModels")

    你只会得到一个Array类型的对象,而不是Backbone.Collection

    要过滤普通数组,应该使用下划线的filter 方法。

    _.filter( this.model.get("VehicleModels"), function(mod) { /* your condition */ } );

    【讨论】:

    • 感谢您的回复:我有以下内容:models = models.filter(function(range) { if (_.where(range.get('VehicleModels'), { 'Fuel': params .fuel }).length > 0) 返回范围; });很好奇是否有更好的方法
    • 这是正确的,但您应该返回 true 或 false 而不是 range 对象。 contains 在这里不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多