我想知道为什么当我将模型添加到集合时,模型上的Validate方法会多次运行。
即使我将模型验证剥离到此...
Client.Model = Backbone.Model.extend ({
validate : function(attrs) {
if ( !attrs.first_name ){
return 'Required';
}
}
});
如果我从validate方法中调用console.log(),我可以看到它被调用了5次。前两个验证成功,第三个验证失败,然后第4个和第5个也通过(随后它在服务器上正确同步)
这会产生一个问题,因为我正在构建一个自定义消息插件,并且它被调用所有5次。
我知道在创建新模型并从服务器检索模型时会正确调用它。但我无法理解的是,这个“第三次”调用验证始终失败。 (顺便说一下,我已经设法弄清楚它不是服务器问题)
我想知道我在这里失踪了什么..
提前致谢。
:)
JSBIN - http://jsbin.com/ucowoq/2/edit
检查控制台,显然POST有错误,但它显示运行5次的验证方法,在我的应用程序上,它每次都无法在3日验证!服务器只返回500错误或创建模型的JSON。
希望这可以帮助任何人看这个。
编辑: 我想出了这个hack来让一切正常运行。我仍然不满意被调用5次的validate方法,但是因为导致验证失败的1次出现包含了一个带键和对象的对象。 'undefined'值,我只是在返回之前检查它。这允许我实现我的'消息'插件,因为我现在可以在正确的时间检索错误。
validate: function( attrs ){
if (attrs.first_name !== undefined){
if (!attrs.first_name)
return 'first name required';
}
}
答案 0 :(得分:1)
导致这种混淆的一行是:Backbone 0.9.9 Line 411它会在再次设置之前清除模型的属性。
为什么这很重要?它无法验证,确实如此,但验证的结果从未在任何地方使用过,因此您不需要在编辑中检查未定义。