【问题标题】:Backbone Validation firing multiple times多次触发主干验证
【发布时间】:2012-12-30 22:54:46
【问题描述】:

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

【问题讨论】:

  • Uncaught TypeError: Cannot call method 'extend' of undefined ... on the jsbin

标签: backbone.js


【解决方案1】:

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

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

【讨论】:

  • 这很重要,因为如果你想从服务器发送错误消息,那么你需要通过错误响应回调来检索它们并且没有上面显示的黑客,你会得到导致混淆的错误验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多