Backbone.js - 在model.validate失败时阻止PUT / POST

时间:2012-01-03 16:18:57

标签: javascript backbone.js

以下面的例子为例:

var Case = Backbone.Model.extend({

  initialize: function(){

    this.bind("error", function(model, error){
        console.log(error)
      });
    },

  url: function() { 
    return '/api/kase?id=' + this.get("id"); 
  },

  validate: function(attrs) {

    return "An error";  



  }
});

在这种情况下,不会调用validate方法:

var kase = new Case();
kase.save();

在这种情况下,不会调用validate方法:

var kase = new Case({subject: null});
kase.save();

在这种情况下,确实调用了validate方法,但仍然在保存时发出了POST请求:

var kase = new Case();
kase.set("subject",null);
// An error
kase.save();
// POST http://localhost.local/api/kase?id=undefined 404 (Not Found)

这是预期的行为吗?当客户端验证失败时,我是否遗漏了关于“取消”POST / PUT请求的内容?或者我应该在点击保存方法之前检查有效的模型? (想想一分钱可能刚刚下降)。

任何指导都将非常感谢。

2 个答案:

答案 0 :(得分:2)

失败的集合不会更新模型数据,而没有参数的保存调用会将模型的当前状态发布/放入服务器(在您的情况下为空)。另一方面,如果使用要验证的数据调用save方法,则在验证失败时它将停止:

 var kase = new Case();
 kase.save({subject:null});

应该记录错误并在发布到服务器之前停止。

答案 1 :(得分:0)

您是否在其他地方有代码在模型上调用save

Backbone在设置模型属性时不会调用服务器;即使验证失败。