如何使用EmberJS深度复制复杂对象

时间:2018-07-26 21:19:59

标签: javascript ember.js

我想用EmberJS复制一个复杂的对象。该对象包含数组,其他对象,数据值,字符串和其他值。我看到不赞成使用Copy方法,并且有一个名为ember-copy的插件来替换它。

我尝试使用ember-copy插件,但是当我将第二个参数设置为true(指示我想要深层复制)时,它说我无法复制未实现Ember.Copyable的对象。我将这个对象转换为EmberObject,并传递了可复制的混合,但是即使如此,它仍然说我需要实现一个Copy方法。我不明白如果需要手动实现,为什么需要使用ember-copy插件。

我认为克隆对象应该是框架必须具备的能力。我使用的每个框架都提供了一种轻松进行此操作的方法,但是使用Ember似乎很难。

3 个答案:

答案 0 :(得分:2)

您还可以使用扩展运算符(ES6)复制(和修改)对象。 ember.copy实际上已按照ember文档中的说明弃用。

const original = { a: 1, b: 2 };
const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
const { a, ...noA } = copy; // noA => { b: 2, c: 3 }

enter image description here

答案 1 :(得分:0)

您应该调用Ember的copy帮助程序来无缝地深度复制复杂对象。

它接受两个参数objdeep

obj(Object)是要克隆的对象,deep(Boolean)如果为true,则会复制该对象的深层副本。

例如

obj1 = {name: 'john', surname: {paternal: 'Doe', maternal: 'Cena'}};
obj2 = Ember.copy(obj1, true); // creates deep clone of my obj.

Ember copy helper doc.

答案 2 :(得分:0)

Object.assign():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

this.set('copiedObject', Object.assign({}, originalObject));