回答
所以我有一些東西。它沒有完成,或完全乾淨,但它的工作原理。基本上,我使用mixin完全繞過Ember關聯。我確定這可以放入適配器或商店中,但現在可以使用。
多態性車型都通過了JSON用的itemId和項目類型:
App.Follow = DS.Model.extend
user: DS.belongsTo('App.User')
itemId: DS.attr("number")
itemType: DS.attr("string")
我添加混入到與它相關的機型:
App.Hashtag = DS.Model.extend App.Polymorphicable,
follows:(->
name: DS.attr("string")
@polymorphicFilter(App.Follow, "Hashtag")
).property('changeCount') #changeCount gives us something to bind to
followers: (->
@get('follows').map((item)->item.get('user'))
).property('follows')
的混入實現了三種方法,一個更新changeCount,一個返回模型的類型和通過itemType和id過濾模型的polymorphicFilter方法:
App.Polymorphicable = Ember.Mixin.create
changeCount: 1
polymorphicFilter: (model, itemType)->
App.store.filter model,
(data) =>
if data.get('itemId')
@get('id') is data.get('itemId').toString() and data.get('itemType') is itemType
itemType:()->
@constructor.toString().split('.')[1]
updatePolymorphicRelationships:()->
@incrementProperty('changeCount')
控制器層的保護,這一切jankyness,除了不必調用updatePolymorphicRelationship確保綁定火:
App.HashtagController = Ember.ObjectController.extend
follow:()->
App.Follow.createRecord({
user: @get('currentUserController.content')
itemId: @get('id')
itemType: @get('content').itemType()
})
#this provides a way to bind and update. Could be refactored into a didSave()
#callback on the polymorphic model.
@get('content').updatePolymorphicRelationships()
App.store.commit()
這是我到目前爲止所。我試圖將東西保留在模型層中,因爲它只是從適配器層中刪除了一個步驟。如果看起來Ember Data未來將不再考慮多態性,那麼將這一切都提升到更高層次是有意義的,但是現在,這可以起作用並使我的控制器(相對)保持乾淨。現在
憑藉最新的餘燼數據建立,現在可以使用多態關聯:
您需要配置您的模型,使其多態:
/* polymorphic hasMany */
App.User = DS.Model.extend({
messages: DS.hasMany(App.Message, {polymorphic: true})
});
App.Message = DS.Model.extend({
created_at: DS.attr('date'),
user: DS.belongsTo(App.User)
});
App.Post = App.Message.extend({
title: DS.attr('string')
});
/* polymorphic belongsTo */
App.Comment = App.Message.extend({
body: DS.attr('string'),
message: DS.belongsTo(App.Message, {polymorphic: true})
});
您還需要您配置alias
性質
DS.RESTAdapter.configure('App.Post' {
alias: 'post'
});
DS.RESTAdapter.configure('App.Comment' {
alias: 'comment'
});
結果從你的服務器預計應該是這樣的:
{
user: {
id: 3,
// For a polymorphic hasMany
messages: [
{id: 1, type: "post"},
{id: 1, type: "comment"}
]
},
comment: {
id: 1,
// For a polymorphic belongsTo
message_id: 1,
message_type: "post"
}
}
我遇到了一個問題,當一個模型有多個多態關聯時 - Post可以是可註釋的,可連接的和可通知的 - 您是否遇到過這個問題?我已經通過讓每個「多態」模型從最後一個擴展來解決它,但這意味着我無法控制每個模型上顯示的屬性。 – 2013-06-20 09:20:38
想知道'hasMany'用'{id:1,type:'type'}'對象代替ID的原因,而belongsTo將這個注入到父對象中嗎?如果它們是相同的,它會更清潔。 'comment:{id:1,message:{id:1,type:'post'}}' – Joe 2014-11-19 20:14:34
- 1. 在Ember中關聯兩組JSON數據
- 2. Ember-數據驗證和關聯
- 3. 關聯數據與多對多關聯
- 4. rails多態關聯(遺留數據庫)
- 5. Ember數據 - 多對多關係?
- 6. Rails 4 - 多態關聯 - 多種關聯
- 7. Ember數據有很多關係
- 8. 我們可以使用Ember數據使用多態關係嗎?
- 9. JSON對於Ember數據多態關係的期望
- 10. accepted_nested_attributes_for多態關聯
- 11. 與多態關聯
- 12. 對多態關聯
- 13. HAS_ONE多態關聯
- 14. Ruby:Declarative_authorization多態關聯
- 15. FactoryGirl多態關聯
- 16. 在多態關聯
- 17. FactoryGirl關於多態關聯
- 18. Ember數據和Ember狀態管理器
- 19. 動態數據關聯相關表值?
- 20. Ember 2簡單的多態關係
- 21. Ember Data中的HasMany多態關係
- 22. 多態性關聯有關狀態
- 23. Ember數據:保存關係
- 24. 具有多態關聯的強參數
- 25. 設置多態關聯
- 26. Rails 4多態關聯has_many
- 27. Rails多態關聯has_many
- 28. 驗證多態關聯
- 29. Rails 3多態關聯
- 30. 軌道4 - 多態關聯
你能不能給你想要做什麼具體的例子信息? – pangratz 2012-07-12 18:14:52
我希望能夠有這樣的東西: JSON:{...「attachedTo」:{「user_id」:16} ...} 和在模型定義: attachedTo:DS.belongsTo( 「auto」) – 2012-09-27 03:37:05