Überschreiben Sie die buildURL-Methode, um die ID des übergeordneten Modells einzuschließen
In Bezug auf Glutdaten und Unterklassen von DS.RESTAdapter zum ÜberschreibenbuildURL
.
Ich habe zwei Endpunkte. Sagen wir sie sind:
example.com/users/user-id
example.com/users/user-id/images
Ersetzen Sie "Benutzer-ID" durch die tatsächliche Benutzer-ID.
Ich habe also zwei Modelle:
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'
Die Nutzlast aus/users/user-id
Endpunkte geben die Image-IDs nicht zurück. Ich habe keine Kontrolle darüber (es ist eine Drittanbieter-API).
Daher muss ich eine separate Anfrage an / users / user-id / images stellen. Ich untergeordnete DS.RESTAdapter, um die URL anzugeben:
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
Wie würde ich von der Route aus überhaupt vorgehen, um die Benutzer-ID an das Geschäft weiterzugeben, damit es die anrufen kann?buildURL
Methode im benutzerdefinierten Adapter mit der Benutzer-ID?
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
Ich schätze, ich kann einen Hash liefernfind
und überspringenbuildURL
insgesamt. AberfindQuery
ist eine private Methode. Gibt es einen bevorzugten Weg, dies zu tun?
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 });