假设我有2个嵌套资源用于帖子。它在我的路由器中定义如下。
this.resource('posts', function () {
this.resource('post', {path: '/:post_id'});
});
每个帖子也可以有多个相关的评论。
在我的* posts_route.js *我设置了这样的模型:
return this.get('store').findAll('post');
这向我的后端api发出一个GET请求,它以json的形式返回所有帖子。此时我只需要基本信息(并且没有注释),因此并非所有数据都包含在返回的json中。稍后,如果我点击特定帖子,我会在* post_route.js *中执行此操作:
return this.get('store').find('post', params.post_id);
有了这个,我希望只为那个特定的帖子做一个新的GET请求。但是,ember-data不会执行新的服务器请求。我在找到它的本地商店中查找它,但不是我希望获得的扩展数据。
有没有办法强制ember-data向服务器发出真实的请求?感谢。
答案 0 :(得分:1)
您可以使用model.reload()
强制向展示路线发送新的GET请求。您可以在展示路线的afterModel
挂钩或setupController
挂钩中执行此操作。如果您确实不想在已加载模型时再次触发此请求,则只需在模型上定义普通的旧reloaded
属性:
MyModel = DS.Model.extend({
... attributes ...
reloaded: false
})
然后在重新加载完成后将其设置为true
:
model.reload().then(function(response) { model.set('reloaded', true'); });
答案 1 :(得分:1)
强制ember-data向服务器发出实际请求的方法如下:
store.findRecord('post', 1, { reload: true })