Emberjs v4无法复制对象

时间:2013-02-04 11:03:33

标签: javascript ember.js

我正在将代码升级到V4,但在复制对象时遇到了问题。我想我显然已经实现了Em.Copyable接口,但我无法使用Em.Copy,所以我在控制台中出错了。我做错了什么?我已经设置了一个简单的jsfiddle来显示我遇到的问题。我确定我只是遗漏了一些东西,但是文档已经完全改变了,而且没有任何例子已经在日期了。

Example

拿这个对象:

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

2 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:3)

您可以使用

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

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