Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 初始化主干视图失败_Javascript_Backbone.js - Fatal编程技术网

Javascript 初始化主干视图失败

Javascript 初始化主干视图失败,javascript,backbone.js,Javascript,Backbone.js,我有一个骨干模范班。我有一个初始化函数。如果我不想在无效数据上初始化类/对象,我该怎么办 initialize: function (data) { if (!valid(data)) { // don't initialize and return an object } } 在这种情况下,您需要重写构造函数 var Library = Backbone.Model.extend({ constructor: function (attrs) { if (

我有一个骨干模范班。我有一个初始化函数。如果我不想在无效数据上初始化类/对象,我该怎么办

initialize: function (data) { 
  if (!valid(data)) { 
     // don't initialize and return an object
  }
}

在这种情况下,您需要重写构造函数

var Library = Backbone.Model.extend({
  constructor: function (attrs) { 
    if (!valid(attrs)) {
      return {anything: 'else'}; 
    }
    Backbone.Model.apply(this, arguments);
  }
});

请记住:

  • 这种模型可能无法在主干集合中工作
  • 如果您想支持完整的模型验证流程,请使用Emile answer
  • 最重要的是:只有当你知道你在做什么的时候才使用这个

    • 模型已经内置了验证机制。您可以首先在模型上定义一个

      此方法未定义,建议您重写它 使用任何可在中执行的自定义验证逻辑 JavaScript。默认情况下,
      save
      在设置任何值之前检查验证 属性,但您也可以告诉set通过 将
      {validate:true}
      作为选项传递

      [……]

      var Chapter = Backbone.Model.extend({
        validate: function(attrs, options) {
          if (attrs.end < attrs.start) {
            return "can't end before it starts";
          }
        }
      });
      
      initialize
      的返回值为ignore。如果要在属性无效时将其更改回默认值,只需使用
      set
      即可

      initialize: function (data) { 
        if (!this.isValid(data)) {
          this.set({ defaultValue: "test" });
          return;
        }
        // normal initialization here
      }
      

      主干模型在实例化对象时将始终运行任何
      initialize
      函数,如果不希望执行某些操作,请不要将其放在
      initialize
      函数上。
      您还可以抛出错误并进行处理。

      干杯。

      你在标题中说视图,在描述中说模型,是什么?@AndreyMuzalevsky它仍然模棱两可,看起来像是OP中的打字错误。模型比视图更有意义(如描述中所述)。@AndreyMuzalevsky模型还有一个
      初始化
      函数,它将
      数据
      作为第一个参数接收,将
      选项
      作为第二个参数接收,而视图的
      初始化
      中的
      选项
      是唯一的默认参数。不要像这样重写
      构造函数
      ,在执行
      新建库()
      时,会破坏预期的模型。它将使用该模型类破坏任何主干集合。@emilebergron它将按预期工作。你试过这个吗?它不会抛出错误,但在这种情况下这是一种不好的做法。@EmileBergeron有很多方法可以下地狱。。。但当有人问我如何去地狱时,我只会指路。问题就在于此。这不是堆栈溢出的精神。
      initialize: function (data) { 
        if (!this.isValid(data)) {
          this.set({ defaultValue: "test" });
          return;
        }
        // normal initialization here
      }