2013-03-11 63 views
2

我希望我的模型验证重复条目,所以我需要在模型中访问集合。BackboneJS:collection.pluck()在模型验证

我使用Backbone.JS与Require.JS一起,这使得它有点混乱。 我似乎无法加载我的收藏作为模块的依赖。

我试图在视图中进行验证,但我想最好的做法是保持它应该在模型中的验证。

有什么建议吗?

回答

2

从骨干网收集docs

如果要添加的模型有已在集合中的集合,它们将被忽略,除非你通过{合并:真正} ...

其中在add - 方法转化为this

if (existing = this.get(model)) { 
    if (options.merge) { 
    existing.set(attrs === model ? model.attributes : attrs, options); 
    if (sort && !doSort && existing.hasChanged(sortAttr)) doSort = true; 
    } 
    continue; 
} 

基本上将ŧ臀部添加任何具有重复的模型idcididAttribute

如果这还不够,那么我建议你在视图中进行验证,因为将模型的集合作为依赖于该确切模型会引入循环依赖,例如。你需要这个集合能够编译这个模型,但是你也需要这个模型来编译这个集合。

因此,如果您需要确保未将模型添加到与该集合中已有的模型具有完全相同属性的集合中,请在视图中执行此操作。它看起来像这样:

if (collection.where(modelToBeAdded.toJSON()).length == 0) { 
    collection.add(modelToBeAdded); 
} 
+0

谢谢。我只是想确保在视图内部进行验证不被认为是'hack-ish'实现。我实际上有两个键,比如key1和key2,它们在集合中必须是唯一的。假设存在一个模型,其中key1为123,key2为456,新模型不能让key1为456,并且在模型中似乎没有办法做到这一点。 – mushroom 2013-03-11 13:50:54