gpt4 book ai didi

javascript - 如何检查主干集合是否已包含具有相同 idAttribute 的模型?

转载 作者:行者123 更新时间:2023-12-03 02:44:38 26 4
gpt4 key购买 nike

我的 Backbone 模型的idAttribute可以是任何东西(Backbone的默认值是“id”)。我想在将模型插入 Backbone 集合之前检查该集合是否已包含具有相同 idAttribute 值的模型。

myCollection.contains(myNewModel) 始终返回 false。我猜这是因为候选模型不一定与集合中已有的实例相同。

我试过了

idAttribute: string = myColllection.model.prototype.idAttribute; // Works fine
let id: string = itemToInsert.get(idAttribute); // Works fine
let exists : boolean : myCollection.findWhere({ idAttribute : id }); // Undefined!

我想要类似的东西

let test: boolean = _.any(self.collection, item => idAttributeValue === item.get("idAttribute")).value();

但我不确定精确的语法。

最佳答案

您可以使用Collection.get确定集合是否具有具有给定 id 的模型,无论底层 idAttribute 是什么。

例如,

var M = Backbone.Model.extend({
idAttribute: 'whatever'
});
var C = Backbone.Collection.extend({
model: M,
hasModel: function(input) {
return !!this.get(input);
}
});

var c = new C([{whatever : 1}]);
console.log(c.hasModel(1)); // true
console.log(c.hasModel(2)); // false

var newModel = new M({whatever: 1});
console.log(c.hasModel(newModel)); // true
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"></script>

如果您想使用findWhere,则必须使用 square bracket notation对于您的属性哈希:

var finder = [];
var idAttribute = M.prototype.idAttribute;
finder[idAttribute] = 1;
console.log(c.findWhere(finder));

关于javascript - 如何检查主干集合是否已包含具有相同 idAttribute 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48150795/

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