关于 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 传递给商店,以便它可以调用
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
我想我可以提供一个哈希到
find
并跳过buildURL
共。但是findQuery
是私有(private)方法。有没有更优选的方法来做到这一点?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 });
最佳答案
覆盖 findQuery
绝对没有错,这是能够扩展适配器的乐趣的一部分。我们不得不做同样的事情(我们的休息端点真的很令人兴奋)。
关于ember.js - 覆盖 buildURL 方法以包含父模型的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21964155/