我试图理解Backbone.js模型验证是如何工作的,但我看到了一些奇怪的不一致。在我的应用中的某个位置,validate
方法按预期调用。然而,在另一个地方,Backbone.js似乎是将{ silent: true }
对象传递给验证器,即使我不想要它。
这是一个说明问题的jsFiddle。应该调用validate
方法当单击“复制”按钮或值发生更改时,但是当我单步执行代码时,很明显_validate
函数正在传递{ silent: true }
选项。
我错过了什么?
更新:弄清楚这里发生了什么。我创建这个jsFiddle最初是为了复制我遇到的一个实际上与这个问题相反的问题 - 我试图将一个空模型添加到一个集合中,并且验证正在触发并阻止我这样做。然而,当我制作小提琴时,它起作用,因为我希望我的应用程序能够工作。添加空模型时,验证未触发。我无法弄清楚差异。
原来我在我的应用程序中使用了Backbone.js 0.9.0,在我的jsFiddle中使用了0.9.1版本。 Jeremy在0.9.1中对验证进行了更改,使其按照我希望它在我的应用程序中工作的方式工作(请参阅GitHub上的this issue)。神秘解决了。
答案 0 :(得分:3)
当您制作新模型时,Backbone特别不会调用_validate
。
杰里米建议你这样做:
var mymodel = new MyModel();
mymodel.set({params});
这是我们在github上的交流:can't override silent:true
答案 1 :(得分:1)
从Backbone docs开始,您似乎必须在模型上调用set或save才能触发验证。
我更新了jsfiddle,以便调用set
,现在验证函数被触发: