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
Javascript 这是backbonejs集合函数的错误吗_Javascript_Backbone.js - Fatal编程技术网

Javascript 这是backbonejs集合函数的错误吗

Javascript 这是backbonejs集合函数的错误吗,javascript,backbone.js,Javascript,Backbone.js,嗨,我是backbonejs的新手 我在尝试一个示例时遇到了一个问题 我已经创建了一个模型为myTodo和myTodo1的2对象 若我像这样调用set函数,它将返回completed:false(由于验证错误) var myTodo = new Todo(); myTodo.set('completed', true, {validate: true}); console.log("completed: "+myTodo.get('completed')); /*

嗨,我是backbonejs的新手

我在尝试一个示例时遇到了一个问题

我已经创建了一个模型为myTodo和myTodo1的2对象

若我像这样调用set函数,它将返回completed:false(由于验证错误)

var myTodo = new Todo(); myTodo.set('completed', true, {validate: true}); console.log("completed: "+myTodo.get('completed')); /* The above code returns following log: This model has been initialized. Remember to set a title for your todo. completed: false */ var myTodo=新Todo(); set('completed',true,{validate:true}); console.log(“completed:”+myTodo.get(“completed”); /* 上述代码返回以下日志: 此模型已初始化。 记住为你的待办事项设置一个标题。 已完成:false */ 购买为什么在执行以下代码时未执行验证

var myTodo1 = new Todo(); myTodo1.set('completed',true); console.log("completed: "+myTodo1.get('completed')); myTodo1.set({validate:true}) console.log("completed: "+myTodo1.get('completed')); /* The above code returns following log: This model has been initialized. underscore-test2.js:11 completed: true underscore-test2.js:28 completed: true */ var myTodo1=新Todo(); myTodo1.set('completed',true); console.log(“completed:”+myTodo1.get(“completed”); myTodo1.set({validate:true}) console.log(“completed:”+myTodo1.get(“completed”); /* 上述代码返回以下日志: 此模型已初始化。下划线-test2.js:11 已完成:true下划线-test2.js:28 已完成:正确 */ 虽然这两组代码执行相同的任务,但在第一种情况下执行验证,但在第二种情况下不执行验证

为什么??

下面是完整的示例代码

var Todo = Backbone.Model.extend({ defaults: { completed: false, }, validate: function(attribs){ if(attribs.title === undefined){ return "Remember to set a title for your todo."; } }, initialize: function(){ console.log('This model has been initialized.'); this.on("invalid", function(model, error){ console.log(error); }); this.on('change:title', function(){ console.log('- Values for title have changed.'); }); } }); **var myTodo = new Todo(); myTodo.set('completed', true, {validate: true}); console.log("completed: "+myTodo.get('completed'));** **var myTodo1 = new Todo(); myTodo1.set('completed',true); console.log("completed: "+myTodo1.get('completed')); myTodo1.set({validate:true}) console.log("completed: "+myTodo1.get('completed'));** var Todo=Backbone.Model.extend({ 默认值:{ 已完成:错误, }, 验证:函数(attribs){ if(attribs.title==未定义){ return“记住为您的待办事项设置标题。”; } }, 初始化:函数(){ log('此模型已初始化'); 此.on(“无效”,函数(模型,错误){ console.log(错误); }); this.on('change:title',function()){ log('-title的值已更改'); }); } }); **var myTodo=新Todo(); set('completed',true,{validate:true}); console.log(“completed:”+myTodo.get(“completed”)** **var myTodo1=新Todo(); myTodo1.set('completed',true); console.log(“completed:”+myTodo1.get(“completed”); myTodo1.set({validate:true}) console.log(“completed:”+myTodo1.get(“completed”)**
他们完全不同

myTodo1.set({validate:true})
在这里,您没有运行验证。您只需将模型的属性“validate”设置为true。基本上,在第二个示例中,您在没有验证的情况下设置了2个属性

在任何情况下,您都不能希望在之后进行验证,因为您的属性已经设置好了

编辑:
但是,我不知道为validate属性设置新值时的行为。但您肯定是在用布尔值覆盖验证函数。这肯定会导致意外行为

编辑2:

myTodo1.set({completed: true}, {validate: true});
好吧,我想这是我最后一次尝试了

myTodo1.set({completed:true});
myTodo1.set({validate:true});
也相当于:

myTodo1.set({completed: true}).set({validate: true});
但在任何情况下都不等同于:

myTodo1.set({completed: true}, {validate: true});
在lattest中,
{validate:true}
告诉主干网在模型上应用验证函数


在前者中,只将completed属性设置为true,而不通知模型进行验证然后再次将validate属性设置为true,而不通知模型进行验证。因此,基本上您从未告诉模型验证

我还想知道如何回复您的回复,它的格式不是Hi@Loamhoof,在backbonejs中这行代码
myTodo.set('completed',true,{validate:true})
和执行相同任务的这行代码,
myTodo.set({completed:true},{validate:true});我想知道如果我两次调用第二个对象上的set函数,为什么这项工作没有完成。myTodo1.set({completed:true});myTodo1.set({validate:true})我同意你的看法,你在评论中写的两段代码是相同的。但是
myTodo1.set({completed:true});myTodo1.set({validate:true})
myTodo.set({completed:true},{validate:true})完全不同。。。在这里,您只是将completed属性设置为true,然后将validate属性设置为true…这一行中的No myTodo.set({completed:true},{validate:true})验证将被执行,如果是这样,那么它还应该使用以下代码来执行myTodo1.set({completed:true});myTodo1.set({validate:true})
myTodo1.set({validate:true})
正在将名为
validate
的属性设置为true。尝试
myTodo1.set({validate:'hello!'});log(myTodo1.get('validate')