确保不会将重复的模型添加到集合中

时间:2014-12-02 15:57:16

标签: javascript backbone.js

我的屏幕上有一个按钮,用于将用户信息预填充到我已设置的集合中。这工作......实际上有点太好了。每次用户点击按钮时,它都会添加一个新模型。为了防止用户向此集合添加多个模型,我想检查以确保集合中的属性与我尝试传入的属性不同。如果这有任何意义。

我的对象看起来像这样

var object = { 
    First: first,
    Second: second
};

我正在插入它

this.app.user.get(type).add(object); //My type is what collection is being passed to it

然后我抓住属性

中每个模型的'Second'属性
var dup = this.app.user.get(type).map(function(model){
    return model.get('Second');
});

我遇到的问题是看到我的属性addressTo(只是一个字符串)等于该dup对象中的任何内容。我已经尝试了一些东西,但没有什么能让我走得太远而且最终破坏了更多东西。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

当你不想使用你拥有的数组时,你可以使用下划线来检查数组是否包含元素(下划线是主干的核心依赖关系,所以你已经拥有它;)):( / p>

_.contains(dup, obj.addressTo)

否则您也可以直接使用该集合:

collection.where({ 'Second': obj.addressTo }).length > 0

答案 1 :(得分:0)

您必须define an id property模型,Backbone会关心重复项。 Here is有关add方法的详细信息。

小例子如何运作:

var Type = Backbone.Model.extend({
  idAttribute: 'Second'
});
var types = new Backbone.Collection([{ First: 1, Second: 11 }], {model: Type})

types.add(new Type({ First: 1, Second: 11 }));
types.add(new Type({ First: 2, Second: 22 }));
types.add(new Type({ First: 2, Second: 22 }));

console.log(types.length); // 2