Así que tengo algo. No está terminado, o completamente limpio, pero funciona. Básicamente, utilizo un mixin para eludir completamente las asociaciones de Ember. Estoy seguro de que esto podría incluirse en el adaptador o la tienda, pero por ahora esto funciona.
modelos polimórficos vienen a través de la JSON con un tipoElemento itemId y:
App.Follow = DS.Model.extend
user: DS.belongsTo('App.User')
itemId: DS.attr("number")
itemType: DS.attr("string")
agrego un mixin a los modelos que están asociadas con ella:
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')
El mixin implementa tres métodos, uno que actualiza el changeCount, uno que devuelve el tipo del modelo y el método polymorphicFilter que filtra un modelo por itemType y id:
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')
La capa del controlador está protegido de todo esto jankyness, a excepción de tener que llamar updatePolymorphicRelationship para asegurarse de que el fuego fijaciones:
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()
Eso es lo que tengo hasta ahora. Estoy tratando de mantener las cosas en la capa del modelo, ya que está a solo un paso de la capa del adaptador. Si parece que Ember Data no va a mirar a los polimórficos para nada en el futuro, entonces tendría sentido llevar esto a un nivel más alto, pero por ahora, esto funciona y deja mis controladores (relativamente) limpios.
¿Puede dar un ejemplo concreto de lo que quiere hacer? – pangratz
Me gustaría poder tener algo como: JSON: {... "attachedTo": {"user_id": 16} ...} y en la definición del modelo: attachedTo: DS.belongsTo ("auto") –