2014-01-09 31 views
2

可以说我有2个帖子的嵌套资源。它在我的路由器中是这样定义的。强制余烬数据从服务器重新加载特定记录

this.resource('posts', function() { 
    this.resource('post', {path: '/:post_id'}); 
}); 

然后每篇文章可以有多个相关的评论。

在我* posts_route.js *我设置的模式是这样的:

return this.get('store').findAll('post'); 

这使得一个GET请求到我的后端API,返回所有文章为JSON。此时我只需要基本信息(并且没有评论),所以并不是所有的数据都包含在返回的json中。后来,如果我点击一个特定的职位,我做这在我的* post_route.js *:

return this.get('store').find('post', params.post_id); 

有了这个,我想只有特定的帖子做了新的GET请求。但是,ember-data不会执行新的服务器请求。我在它找到它的本地商店中查找它,但没有找到我希望获得的扩展数据。

有没有办法强制烬数据做一个真正的请求到服务器?谢谢。

+0

如果您第一次设置帖子项目脏?请参阅:http://stackoverflow.com/questions/16158329/ember-data-how-to-set-isdirty-for-a-record – DelphiLynx

+0

@DelphiLynx感谢您的回应。我喜欢你的想法,但我无法让它设置为肮脏。在我找到('post',params.post_id)之前,应该在我的post_route中尝试让它变脏? – Oscar

+0

@DelphiLynx我终于解决了我的问题。这个问题实际上与我介绍它有点不同。我将编辑我的问题,并写下我明天如何解决问题。再次感谢。 – Oscar

回答

1

您可以使用model.reload()强制显示路由的新GET请求。您可以在展示路线的afterModel挂钩或setupController挂钩处执行此操作。如果你真的不想再次触发该请求,如果该模型已经加载,你可以定义一个普通的老reloaded财产上的模型:

MyModel = DS.Model.extend({ 
    ... attributes ... 
    reloaded: false 
}) 

然后设置,当重装完成对true

model.reload().then(function(response) { model.set('reloaded', true'); }); 
+0

谢谢@Nick_Ragaz!你的回答很明确,并为我解决。 – Oscar

0

办法迫使烬数据做服务器真正的要求是这样的:

store.findRecord('post', 1, { reload: true })

相关问题