3

我正在将代码升级到 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
4

2 回答 2

5

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

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在您的类上实现该方法。

于 2013-02-04T13:14:29.807 回答
3

您可以使用

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

创建默认模型,该模型将具有复制方法。

于 2014-02-11T12:48:03.633 回答