当前位置: 首页 > 知识库问答 >
问题:

这是backbonejs集合函数的错误吗

劳和雅
2023-03-14

嗨,我是Backbonejs的新手,

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

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

如果我像这样调用set函数,它返回完成:由于验证错误而返回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 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 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'));**

共有1个答案

南门鸿振
2023-03-14

他们完全不同。

myTodo1.set({validate:true})

在这里,您没有运行验证。您只需将模型的属性“validate”设置为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});

在最新版本中,{valester: true}告诉Backbone在模型上应用验证函数。

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

 类似资料:
  • 问题内容: 我正在尝试使用jQuery和Ajax,并且使用了这种方法。但是我收到错误$ .toJSON不是firebug中的函数。问题出在哪里?我使用jquery 1.3.2。谢谢 问题答案: 没错 没有功能:http : //api.jquery.com/jQuery.toJSON。也许您想使用它。

  • 问题内容: 我被困在保留关键字“ this”的错误上。在下面的我的React Component中,我将状态从我的主要组件“ App.js”传递到了“ RecipeList.js”组件,然后映射数据并呈现每个RecipeItem组件。我只是不明白为什么我会收到此错误 React.js-语法错误:这是保留字 该错误在render return方法内的RecipeList中调用。如果有人可以帮助,那就

  • 在连续情景中,我们不得不处理函数的集合和函数的系集。由函数集的名字可以看出,它就是一组函数,通常是一个变量——时间的函数。为描述函数集,我们可以给出集合中各种函数的显式表达式,也可以给出只有集合中的函数才拥有的性质。下面是一些示例: 由以下函数组成的集合: 。 的每个具体值确定了集合中的一个特定函数。 一个由时间函数组成的集合,其中包含频率不超过W周期/秒的所有时间函数。 一个由带宽局限于W、幅度

  • 我得到了一个错误:这个$情态动词模态不是一个函数 我通过gulp文件从wwwroot文件夹中的Node_模块获得了ng2-bs3-modal。 我的文件夹结构是: 如果我将ng2-bs3-modal移动到脚本(typescript)文件夹,它将提供jasmin区域。js错误。在上面的结构中,我得到了“this.$modal.modal不是函数”错误,因为ng2-bs3-modal中的所有类型脚本都

  • 问题内容: 我正在尝试编写示例AngularJS和SpringMVC项目。spring方法可以正常工作,但是我的站点控制器中的函数声明存在问题。我的应用应该从文本输入中返回一个单词,但是当我单击按钮时,出现了以下错误: 这是我的index.html: 和controller.js: 我注意到,这一定是ng-click值中的函数声明存在某种问题。在现场启动时,controler.js可以正常运行,但

  • 问题内容: 我已经建立了一个工厂来处理我的控制器的功能,但是不知何故,控制器会在其中一个功能上返回错误: 错误:Auth.getUser(…)。成功不是函数@ http:// localhost:8080 / app / controllers / mainCtrl.js:10:1 … 我不知道这是怎么回事,其余功能似乎工作正常? 主控制器: 问题答案: 请参阅$ http服务文档中的 “ 弃用声