下方更新
我找到了解决方案,但我不知道这是否真的可行。首先,我使用 findQuery 调用设置路由:
App.UserCustomRoutesRoute = Em.Route.extend({
model: function() {
return this.store.find('user_custom_route', {user_id: this.controllerFor('user').get('user_id')});
}
});
然后我连接到配置 get 请求的适配器方法(findQuery 和 buildUrl)。
App.UserCustomRouteAdapter = DS.RESTAdapter.extend({
buildURL: function(type, id) {
return 'users/' + id + '/routes';
},
findQuery: function(store, type, query) {
return this.ajax(this.buildURL(type.typeKey, query.user_id), 'GET');
}
});
像这样设置请求的形式为 'users/:user_id/routes'。
更新
我不得不更改App.UserCustomRoutesRoute 的模型方法。大多数情况下,user_id App.UserController 在调用 App.UserCustomRoutesRoute 时尚未设置(当用户通过其相关地址('url#/users/:user_id/custom_routes')进入站点时)。所以我必须进行身份验证检查,如果成功,则在调用相关商店之前回复 user_id。
App.UserCustomRoutesRoute = Em.Route.extend({
model: function() {
var self = this;
console.log('user custom routes route');
return Em.$.get('loggedIn').then(function(promise) {
return self.store.find('user_custom_route', {user_id: promise.user_id});
});
}
});