簡體   English   中英

Ember.js:通過原型和元數據動態更改Ember對象的“類”

[英]Ember.js: Dynamically changing the 'class' of an Ember object via prototype and meta

我想知道是否有可能更改現有對象實例的“類”(從Ember.Object.extend派生),例如計算屬性,Ember的_super /繼承/ mixins,綁定,觀察者,以及其他所有好處Ember Object模型仍然有效。

我試過簡單地將__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元對象t[Ember.META_KEY].desc來查看所有屬性的列表,但是我不清楚該元對象到底要做什么。

如何修改元對象以允許計算的屬性和綁定與新重新分配的原型一起使用?

真正的答案是您不應該這樣做。 灰燼在引擎蓋下設置了很多東西,絕對不建議嘗試手動撕破膽量並重新構建它們。

我確信有更好的解決方案,例如將屬性復制到對象的新實例中。

或者,如果您使用的是Ember Data,則可以使用多態關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM