覆盖buildURL方法以包含父模型的id

Jam*_*mes 6 adapter ember.js ember-data

关于ember-data和子类化DS.RESTAdapter来覆盖buildURL.

我有两个端点.让我们说他们是:

example.com/users/user-id
example.com/users/user-id/images
Run Code Online (Sandbox Code Playgroud)

将"user-id"替换为实际的用户ID.

所以我有两个型号:

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'
Run Code Online (Sandbox Code Playgroud)

但是,来自/users/user-id端点的有效负载不会返回图像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
Run Code Online (Sandbox Code Playgroud)

从路由开始,我甚至会如何将用户ID传递给商店,以便它可以buildURL使用用户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
Run Code Online (Sandbox Code Playgroud)

我想我可以提供哈希findbuildURL完全跳过.但这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 });
Run Code Online (Sandbox Code Playgroud)

Kin*_*n2k 4

覆盖绝对没有任何问题findQuery,这是能够扩展适配器的乐趣的一部分。我们必须做同样的事情(我们的休息端点真的很令人兴奋)。