javascript - 如何使 Backbone.js 集合项目独一无二?

标签 javascript backbone.js underscore.js

假设我有这些 Backbone.js 模型:

var Truck = Backbone.Model.extend({});

var truck1 = new Truck();
var truck2 = new Truck();

truck1.set("brand", "Ford");
truck2.set("brand", "Toyota");
truck3.set("brand", "Honda");
truck4.set("brand", "Ford");

然后,假设我们有一个 Backbone.js 集合:

var TruckList = Backbone.Collection.extend({
  model: Truck,
  comparator: function(truck) {
     return truck.get("brand");
  };

});

我是一名汽车收藏家,所以是时候将每辆车添加到我的收藏中了:

Trucks = new TruckList();
Trucks.add(truck1);
Trucks.add(truck2);
Trucks.add(truck3);
Trucks.add(truck4);

仅关注品牌属性,truck4 是 truck1 的副本。我的收藏中不能有重复项。我需要我的收藏具有独特的值(value)。

我的问题是,如何从我的 Backbone.js 集合中删除重复项?

我应该为此使用 Underscore.js 吗?如果是这样,有人可以提供一个工作/可运行的示例来说明如何执行此操作。

假设如下:

1.集合未排序

  1. 移除必须在品牌属性值上完成

  2. Ajax 调用来填充卡车的每个实例。这意味着添加到集合时,您无权访问 Truck 属性。

最佳答案

我会覆盖您的 TruckList 集合中的 add 方法,并使用下划线检测那里的重复项并拒绝重复项。类似的东西。

TruckList.prototype.add = function(truck) {
    // Using isDupe routine from @Bill Eisenhauer's answer
    var isDupe = this.any(function(_truck) { 
        return _truck.get('brand') === truck.get('brand');
    });

    // Up to you either return false or throw an exception or silently ignore
    // NOTE: DEFAULT functionality of adding duplicate to collection is to IGNORE and RETURN. Returning false here is unexpected. ALSO, this doesn't support the merge: true flag.
    // Return result of prototype.add to ensure default functionality of .add is maintained. 
    return isDupe ? false : Backbone.Collection.prototype.add.call(this, truck);
}

关于javascript - 如何使 Backbone.js 集合项目独一无二?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416958/

相关文章:

backbone.js - 如何用 Backbone-Relational 表示 UML 关系?

javascript - backbone.js 每页有几个模型和 View

javascript - 未定义下划线模板 Uncaught ReferenceError 变量

Javascript 事件针对列表项而不是其元素

javascript - 使用 onclick addClass 让 div 出现

javascript - Vue-router 滚动行为 : Why is savedPosition always equal to { x: 0, y : 0 }?

javascript - 将 Backbone 集合与数组进行比较

javascript - 在 IE7 中未选中 webgrid 中突出显示的复选框

html - 如何使用 Handlebars 遍历 JSON 结构

javascript - 使用下划线库替代 _.invert()