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-在模型默认值中使用new()-循环引用_Backbone.js - Fatal编程技术网

Backbone.js-在模型默认值中使用new()-循环引用

Backbone.js-在模型默认值中使用new()-循环引用,backbone.js,Backbone.js,采用以下模式: MyModel= Backbone.Model.extend({ defaults : { myNestedModel:undefined, }, initialize: function() { this.set({myNestedModel: new MyNestedModel()); } }); 它有一个名为“myNestedModel”的属性,该属性具有以下定义: MyNestedModel= Backbone.Model.extend(

采用以下模式:

MyModel= Backbone.Model.extend({
  defaults : {
    myNestedModel:undefined,
  },
  initialize: function() {
    this.set({myNestedModel: new MyNestedModel());
  }
});
它有一个名为“myNestedModel”的属性,该属性具有以下定义:

MyNestedModel= Backbone.Model.extend({
  defaults : {
    myModel:undefined,
  }
});
它也有一个单独的属性名“myModel”。现在,如果我创建MyModel的实例:

aModel=newmymodel()

嵌套模型将在MyModel的initialize方法中设置。然后,我在两个步骤中使用JSON.stringify:

// Use Backbone.js framework to get an object that we can use JSON.stringfy on
var modelAsJson = aModel.toJSON();

// Now actually do stringify 
var modelAsJsonString = JSON.stringify(modelAsJson);
这很好,我得到了MyModel的JSON表示,以及MyNestedModel的属性。使用默认值时会出现问题,例如:

MyModel= Backbone.Model.extend({
      defaults : {
        new MyNestedModel(),
      }
    });
这会导致JSON.stringify出现问题,因为它不支持循环引用。我假设创建循环引用是因为MyModel的所有实例都共享同一个MyNestedModel实例。而initialize方法为每个实例创建一个新的嵌套模型

问题:
  • 我对默认值的理解是:{}是 问题正确吗
  • 我拿到了 我应该为所有属性使用默认值。如果是的话 在这种情况下,我应该如何在呈现的场景中使用默认值 在这个帖子/问题中
  • 有人能澄清一下
    默认值:{}
    关于值的应用时间、覆盖时间和 实例是否共享相同的默认“实例”

  • 默认值仅用于模型内的属性(模型中的数据),无论何时创建模型,它都会从默认值中获取值并设置属性。e、 g

    User = Backbone.Model.extend({
         defaults : {
             rating : 0
         }
    })
    
    User1 = new User({ name : 'jack', email : 'jack@gmail.com' });
    User2 = new User({ name : 'john', email : 'john@gmail.com' });
    
    User1.set({ rating : 2 });
    
    现在,当使用toJSON调用时,您的两个模型将打印出来

    {
       rating: 2,
       name: 'jack',
       email: 'jack@gmail.com'
    }
    {
       rating: 0,
       name: 'john',
       email: 'john@gmail.com'
    }
    
    由于默认值是一个对象,因此您在其中放置的每个值都会立即求值,因此:

    defaults : {
        rating : defaultRating()
    }
    
    将调用defaultRating()-不是每次初始化模型时都调用,而是立即调用(在extend方法中)

    对于需要在创建模型时存在某些数据的模型,应使用默认值(例如new myModel())

    在您的示例中,您有以下错误:

    1.设置一个没有属性的值

     defaults : {
          PROPERTY : new Model() 
     }
    
    2.对于默认设置,您不需要这样的选项-您应该只为模型放置属性(数据)

    只要扩展模型中的新默认值未替换默认值,则默认值始终适用,例如

     var Model = Backbone.Model.extend({ defaults : { alpha : 'beta' } });
     var myModel = Model.extend({ defaults : { beta : 'gama' } });
    
    现在,您的myModel在初始化时将具有

     { beta : 'gama' } // alpha : 'beta' will not be set as value, because it is replaced
    

    杰出的这完全是不直观的。我在做
    “子项:[]”
    ,甚至把事情搞砸了。谢谢你+1.