Переопределить метод 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 });

Ответы на вопрос(1)

Ваш ответ на вопрос