强制ember-data从服务器重新加载特定记录

时间:2014-01-09 08:00:41

标签: javascript json rest ember.js ember-data

假设我有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向服务器发出真实的请求?感谢。

2 个答案:

答案 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 })