Backbone模型中的嵌套属性更改默认对象

时间:2017-12-14 06:49:17

标签: javascript backbone.js

Backbone的模型实例(包括嵌套参数)更改正在影响模型的默认值。

X = Backbone.Model.extend({defaults:{x:{y:{z:1}}, a: "hello"}})

x = (new X()).toJSON()

/*
x -- defaults -->
{
  "x": {
    "y": {
      "z": 1
    }
  },
  "a": "hello"
}
*/

// using lodash's merge, update nested object value
_.merge(x,{x:{y:{z:2}},a:"world"})

/*
{
  "x": {
    "y": {
      "z": 2 // nested, changed
    }
  },
  "a":"world" // changed
}
*/

y = (new X()).toJSON()

/*
y, should be defaults -->
{
  "x": {
    "y": {
      "z": 2 //What!!
    }
  },
  "a":"hello" // remains same as default
}
*/

默认的obj的嵌套参数的引用正在更新 - 因此,创建的所有后续模型都将具有新引用(通过new创建,因此默认的对象)。

试图找到一种解决方法,而不将嵌套对象作为另一个模型。

0 个答案:

没有答案