Emberjs v4无法复制对象

Emberjs v4 Unable to copy object

本文关键字:复制 对象 v4 Emberjs      更新时间:2023-09-26

我正在将代码升级到V4,但在复制对象时遇到了一个问题。我想我显然已经实现了Em.Copyable接口,但Em.Copy对我来说不可用,所以我在控制台中遇到了一个错误。我做错了什么?我设置了一个简单的jsfiddle来显示我遇到的问题。我确信我只是遗漏了一些东西,但文档已经完全更改,不再有任何最新的示例。

示例

拿这个物体来说:

App.Key = Em.Object.create(Em.Copyable, {
    first: 1,
    second: 2
});

这个事件(在jsfiddle中是一个按钮,但它可以是任何东西):

doClick: function () {
    var k = Em.copy(App.Key);
}

收到以下错误消息,代码执行停止:

Error: assertion failed: Cannot clone an Ember.Object that does not implement Ember.Copyable

Ember Object.create()最近发生了更改,不再支持mixin。有几种选择。最常见的是在扩展ember对象时添加mixin。例如:

App.Key = Em.Object.extend(Em.Copyable);
App.key = Em.Object.create({
  first: 1,
  second: 2
});

如果你真的想在创建过程中使用add-mixins,你可以使用新的createWithMixins方法:

App.key = Em.Object.createWithMixins(Em.Copyable, {
  first: 1,
  second: 2
});

现在您的对象已经有了Mixin,您会发现该示例仍然失败:Object [object Object] has no method 'copy'。这是因为Em.Copyable mixin实际上并没有提供实现——它只是向Ember发出信号,表明您的对象支持copy操作。您仍然需要在类上实现copy方法。

您可以使用

App.Key = Ember.Map.create({
    first: 1,
    second: 2
});

以创建默认模型,该模型将具有copy方法。