Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 验证不起作用?_Backbone.js - Fatal编程技术网

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})