Substituir o método buildURL para incluir o ID do modelo pai
Em relação a dados de brasa e subclasse DS.RESTAdapter a substituirbuildURL
.
Eu tenho dois pontos finais. Vamos dizer que são:
example.com/users/user-id
example.com/users/user-id/images
Substitua "ID do usuário" pelo ID do usuário real.
Então, eu tenho dois modelos:
App.User = DS.Model.extend
images: DS.hasMany 'image',
async: true
inverse: 'user'
App.Image = DS.Model.extend
user: DS.belongsTo 'user',
async: true
inverse: 'images'
No entanto, a carga útil de/users/user-id
pontos finais não retornam os IDs da imagem. Eu não tenho controle sobre isso (é uma API de terceiros).
Portanto, preciso fazer uma solicitação separada para / users / user-id / images. Estou subclassificando DS.RESTAdapter para especificar o URL:
App.ImageAdapter = DS.RESTAdapter.extend
buildURL: (type, id) ->
# need to return "/users/user-id/images"
# but need to get the value of user-id somehow
A partir da rota, como eu passaria o ID do usuário para a loja para que ele pudesse chamar obuildURL
no adaptador customizado com o ID do usuário?
App.UserRoute = Em.Route.extend
afterModel: (model) ->
# how to provide value of `model.get 'id'` to store/adapter/buildURL?
# do I even do that here?
promise = @get('store').find 'image'
@controllerFor('images').set 'model', promise
Eu acho que posso fornecer um hash parafind
e pularbuildURL
completamente. MasfindQuery
é um método privado. Existe uma maneira mais preferida de fazer isso?
App.UserRoute = Em.Route.extend
afterModel: (model) ->
promise = @get('store').find 'image', userId: model.get 'id'
@controllerFor('images').set 'model', promise
App.ImageAdapter = DS.RESTAdapter.extend
findQuery: (store, type, query) ->
imagesURL = "#{@host}/users/#{query.userId}/images"
delete query.userId
@ajax(imageURL, 'GET', { data: query });