Backbone.js 验证不起作用?
我有一些代码:Backbone.js 验证不起作用?,backbone.js,Backbone.js,我有一些代码: var Person = new Backbone.Model({name: 'Jeremy'}); Person.validate = function(attrs) { if (!attrs.name) { return 'I need your name'; } }; Person.on("invalid", function(m
var Person = new Backbone.Model({name: 'Jeremy'});
Person.validate = function(attrs) {
if (!attrs.name) {
return 'I need your name';
}
};
Person.on("invalid", function(model, error) {
alert(model.get("title") + " " + error);
});
Person.set({name: 'Samuel'});
console.log(Person.get('name'));
// 'Samuel'
Person.unset('name', {validate: true});
console.log(Person.get('name'));//Why can i print name here if it unsetted?
当我键入unset方法时,我会看到一个错误警报。没错。但是,如果未设置,为什么我可以在控制台中打印该名称?该名称仍然存在,因为验证失败使未设置停止了任何操作
关于验证如何使用set和unset,它不是非常明确,但对于save,它是非常明确的:
验证模型。验证属性、选项
[…]如果validate返回错误,则不会继续保存,并且不会在服务器上修改模型属性
因此,有理由认为验证错误将阻止当前操作集、取消设置、保存。。。不要改变任何事情
您可以通过检查主干源代码来了解它是如何工作的。首先,您需要知道这只是一个伪装的集合呼叫:
unset: function(attr, options) {
return this.set(attr, void 0, _.extend({}, options, {unset: true}));
}
因此,我们看:
一旦set知道它正在使用什么,验证就会发生,如果验证失败,set将返回而不做任何更改
主干文档遗漏了很多重要的内容,因此如果要使用主干,您需要对主干源代码略知一二。源代码非常简单,不要害怕跳进去看看发生了什么。这样做:为了不触发事件,可以使用silent:true选项。我相信您的代码中可能存在一些问题。不管怎样,做下面的事情——它应该会起作用。在我的测试中,它做到了
Person.unset('name',{validate: true,silent:true})
p、 美国:下面的Mu提供了大量信息
Person.unset('name',{validate: true,silent:true})