假设我有 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 向服务器发出真正的请求?谢谢。
最佳答案
您可以使用model.reload()
强制向显示路由发出新的 GET 请求。您可以在显示路由的 afterModel
Hook 或 setupController
Hook 中执行此操作。如果您确实不想在模型已加载的情况下再次触发此请求,则可以在模型上定义一个普通的旧 reloaded
属性:
MyModel = DS.Model.extend({
... attributes ...
reloaded: false
})
然后在重新加载完成时将其设置为 true
:
model.reload().then(function(response) { model.set('reloaded', true'); });
关于javascript - 强制 ember-data 从服务器重新加载特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014643/