0

我想知道是否可以更改Ember.Object.extend现有对象实例的“类”(派生自),例如计算属性 Ember 的_super/继承/混合、绑定、观察者以及 Ember 对象模型的所有其他好处仍然有效.

我尝试简单地将 设置__proto__为不同的类prototype,但这对于计算属性失败(它将查找旧类的计算属性):

Triangle = Ember.Object.extend
  sides: 3
  greeting: (->
    "I'm a triangle and I have #{sides} sides"
  ).property('sides')

Square = Ember.Object.extend
  sides: 4
  greeting: (->
    "I'm a square and I have #{sides} sides"
  ).property('sides')

t = Triangle.create()
t.get('greeting') # I'm a triangle and I have 3 sides
t.__proto__ = Square.prototype
t.get('greeting') # I'm a triangle and I have 3 sies

在查看源代码时,似乎Ember.get通过对象解析了计算属性meta(来源:https ://github.com/emberjs/ember.js/blob/v1.1.2/packages/ember-metal/lib/property_get.js# L66 )。通过查看元对象,我可以看到所有属性的列表t[Ember.META_KEY].desc,但我不清楚如何处理元对象。

如何修改元对象以允许计算属性和绑定与新重新分配的原型一起使用?

4

1 回答 1

0

真正的答案是你不应该这样做。Ember 在引擎盖下设置了很多内容,并且绝对不建议手动撕掉内脏并重新构建它们。

我确信对此有更好的解决方案,例如将属性复制到对象的新实例中。

或者,如果您使用的是 Ember Data,则可以使用多态关系。

于 2013-11-05T15:39:22.293 回答