gpt4 book ai didi

validation - Backbone - 未调用模型验证且未捕获 "invalid"事件

转载 作者:行者123 更新时间:2023-12-05 01:11:34 24 4
gpt4 key购买 nike

我正在使用 Backbone 和 Marionette,我正在从后端检索我的模型。
这些模型属于一个集合。
问题是:
1) validate 方法永远不会被调用,除非从初始化中显式调用。为什么?
2) 当我显式调用 validate 方法时,它会正确返回我为测试创建的无效模型。但我无法捕捉到“无效”事件。我究竟做错了什么?
这是模型:

 var Job = Backbone.Model.extend({
validate: function(attrs){
if (! attrs.title ) {
return "A job should have a title";
}
},

initialize: function(){

this.validate(this.attributes); //manual call to validate
this.on("invalid", function(model, error){ //never executed even when the validate model returns the error string
console.log(error);
});

}

});

这里是集合:
var JobList = Backbone.Collection.extend({
model: Job,
url: '/api/1.0/jobs/',
parse: function(response) {
return response.results;
}

});

最佳答案

Backbone 中的验证逻辑已更改 0.9.10 .引自 change log ,验证现在的工作方式如下:

Model validation is now only enforced by default in Model#save and no longer enforced by default upon construction or in Model#set, unless the {validate:true} option is passed.


因此,如果您希望在初始化时验证模型或 set ,你需要通过选项 validate:true到构造函数/方法。
您没有收到 invalid 的原因手动调用 model.validate 时的事件方法是 Backbone 是 未执行任何验证 当你这样做的时候。您调用在模型上定义的方法,而 Backbone 对此一无所知。
Backbone 中的模型验证是基于约定的,因为 Backbone 没有定义名为 validate 的方法。在模型上 - 你自己做。但是,如果您定义了这样的方法,Backbone 将在验证发生时为您调用它(在 save 上,或在带有 validate:true 的构造函数/ setter 中,并且将触发 invalid 事件。

关于validation - Backbone - 未调用模型验证且未捕获 "invalid"事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14537548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com