假设我有这些 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.集合未排序
移除必须在品牌属性值上完成
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/