0

嗨,我是新来的backbonejs,

我在尝试http://addyosmani.github.com/backbone-fundamentals/#validation的示例时遇到了问题

我创建了 2 个模型对象,myTodo 和 myTodo1,

如果我像这样调用 set 函数,由于验证错误,它返回完成:false

    var myTodo = new Todo();
    myTodo.set('完成', true, {validate: true});
    console.log("完成:"+myTodo.get('完成'));
    /*
    上面的代码返回以下日志:
    该模型已初始化。
    记得为你的待办事项设置一个标题。
    完成:假
    */

购买为什么在执行以下代码时未执行验证

    var myTodo1 = new Todo();
    myTodo1.set('完成',true);
    console.log("完成:"+myTodo1.get('完成'));
    myTodo1.set({validate:true})
    console.log("完成:"+myTodo1.get('完成'));
    /*
    上面的代码返回以下日志:
    该模型已初始化。下划线-test2.js:11
    完成:真正的下划线-test2.js:28
    完成:真
    */

虽然两组代码都做同样的工作,但在第一种情况下验证执行但在第二种情况下不执行

为什么?????

下面是完整的示例代码。

    var Todo = Backbone.Model.extend({
      默认值:{
        完成:假,
      },
      验证:函数(属性){
        如果(attribs.title === 未定义){
            return "记得为你的待办事项设置一个标题。";
        }
      },
      初始化:函数(){
        console.log('此模型已初始化。');
        this.on(“无效”,函数(模型,错误){
            控制台日志(错误);
        });
        this.on('change:title', function(){
            console.log('- 标题的值已经改变。');
        });
      }
    });

    **var myTodo = new Todo();
    myTodo.set('完成', true, {validate: true});
    console.log("完成:"+myTodo.get('完成'));**

    **var myTodo1 = new Todo();
    myTodo1.set('完成',true);
    console.log("完成:"+myTodo1.get('完成'));
    myTodo1.set({validate:true})
    console.log("完成:"+myTodo1.get('完成'));**

4

1 回答 1

1

它们完全不同。

myTodo1.set({validate:true})

在这里,您没有运行验证。您只是将模型的属性“验证”设置为 true。所以基本上,在第二个示例中,您设置了 2 个属性而不进行验证。

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

编辑:
虽然我不知道为 validate 属性设置新值时的行为。但是您肯定会用布尔值覆盖您的验证功能。这肯定会导致意想不到的行为。

编辑2:

好吧,我想这将是我最后一次尝试。

myTodo1.set({completed:true});
myTodo1.set({validate:true});

也相当于:

myTodo1.set({completed: true}).set({validate: true});

但在任何情况下都不等同于:

myTodo1.set({completed: true}, {validate: true});

在最新版本中,{validate: true}告诉 Backbone 在模型上应用验证功能。

在前者中,您只需将completed 属性设置为 true而不告诉模型进行 validate然后再次将validate 属性设置为 true ,而不告诉模型进行 validate 。所以基本上你永远不会告诉模型 validate

于 2013-04-06T13:11:33.127 回答