0

我想知道为什么当我将模型添加到集合时,模型上的 Validate 方法会运行多次。

即使我将我的模型验证剥离到这个...

Client.Model = Backbone.Model.extend ({

    validate : function(attrs) {
        if ( !attrs.first_name ){
            return 'Required';
        }   
    }  

});

如果我从 validate 方法中进行 console.log() ,我可以看到它被调用了 5 次。前两个验证成功,第三个失败,然后第四个和第五个也通过(随后它在服务器上正确同步)

这造成了一个问题,因为我正在构建一个自定义消息插件,并且在验证发生时它被调用了 5 次。

我知道当我创建一个新模型并从服务器检索模型时它会被正确调用。但我无法理解的是这个“第三次”验证调用总是失败。(顺便说一句,我已经设法弄清楚这不是服务器问题)

我想知道我在这里缺少什么..

提前致谢。

:)

JSBIN - http://jsbin.com/ucowoq/2/edit

检查控制台,显然POST有错误,但它显示验证方法运行了5次,在我的应用程序上,它每次都在第3次验证失败!服务器只为创建的模型返回 500 错误或 JSON。

希望这对任何查看此内容的人有所帮助。

编辑:我想出了这个技巧来让一切正常工作。我仍然对 validate 方法被调用 5 次感到不满意,但是因为导致验证失败的 1 次出现包含一个具有键和“未定义”值的对象,所以我只是在返回任何内容之前检查它。这允许我实现我的“消息”插件,因为我现在可以在正确的时间检索错误。

    validate: function( attrs ){
      if (attrs.first_name !== undefined){
        if (!attrs.first_name)
          return 'first name required';
      }
    } 
4

1 回答 1

1

造成这种混乱的行是:Backbone 0.9.9 Line 411它在再次设置之前清除模型的属性。

为什么这很重要?它将无法验证,是的,但该验证的结果永远不会在任何地方使用,因此您不需要在编辑中检查 undefined 。

于 2012-12-30T14:54:46.200 回答