关于ember-data和子类化DS.RESTAdapter以覆盖buildURL
。
我有两个端点。让我们说它们是:
example.com/users/user-id
example.com/users/user-id/images
将“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'
但是,来自/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
从路由开始,我如何将用户ID传递给商店,以便它可以使用用户ID调用自定义适配器中的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 });
答案 0 :(得分:4)
覆盖findQuery
绝对没有错,这是扩展适配器的乐趣之一。我们必须做同样的事情(我们的休息端点非常令人兴奋)。