主干验证多次触发

时间:2012-12-30 12:44:21

标签: backbone.js

我想知道为什么当我将模型添加到集合时,模型上的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';
      }
    } 

1 个答案:

答案 0 :(得分:1)

导致这种混淆的一行是:Backbone 0.9.9 Line 411它会在再次设置之前清除模型的属性。

为什么这很重要?它无法验证,确实如此,但验证的结果从未在任何地方使用过,因此您不需要在编辑中检查未定义。