Переопределить метод buildURL для включения идентификатора родительской модели
Относительно ember-данных и наследования DS.RESTAdapter для переопределенияbuildURL
.
У меня есть две конечные точки. Допустим, они:
example.com/users/user-id
example.com/users/user-id/images
Замените «идентификатор пользователя» фактическим идентификатором пользователя.
Итак, у меня есть две модели:
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'
Тем не менее, полезная нагрузка от/users/user-id
конечные точки не возвращают идентификаторы изображения. У меня нет контроля над этим (это сторонний API).
Поэтому мне нужно сделать отдельный запрос к / users / user-id / images. Я создаю подкласс DS.RESTAdapter, чтобы указать 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
По маршруту, как бы я вообще передал идентификатор пользователя в магазин, чтобы он мог вызватьbuildURL
метод в кастомном адаптере с идентификатором пользователя?
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
Я думаю, что могу предоставить хэшfind
и пропуститьbuildURL
в целом. НоfindQuery
это частный метод. Есть ли более предпочтительный способ сделать это?
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 });