我正在将代码升级到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
答案 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
});
创建默认模型,它将具有复制方法。