如何检查 backbone 集合是否已包含具有相同 idAttribute 的模型?
How to check if a backbone collection already contains a model with the same idAttribute?
我的 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));
我的 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));