gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:20:59 24 4
gpt4 key购买 nike

假设我有这些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com