如果我有以下设置:
this.resource('books', function(){
this.route('book', {path: '/:id'} )
})
App.Book = DS.Model.extend({
title: attr('string'),
year: attr('number'),
pages: hasMany('page')
})
App.Page = DS.Model.extend({
name: attr('string')
})
书籍路线JSON
"books":
[
{
"id": 23,
"title": "the hunger games"
},
{
"id": 67,
"title": "lord of the rings"
},
{
"id": 89,
"title": "the hobbit"
}
]
books/23
json
"book": {
"id": 23,
"title": "the hunger games",
"year": 2008,
"pages": [4, 5, 6]
}
App.BooksRoute = Ember.Route.extend({
model: function(){
return this.store.find('books')
}
})
App.BooksBookRoute = Ember.Route.extend({
model: function(params){
return this.store.find('list', params.id)
}
})
我试图在图书路线上有一个通用列表,这样它只显示标题和年份。在导航到books/:id
时,我想强制路由请求剩余数据 - 即:年份,页面,最后是页面模型。
使用上述格式,在导航到特定图书路线(例如:/book/23
)后,该路线只使用BooksRoute
中定义的商店,并且不会对此进行新的请求个人书。这导致数据缺少年份和页面信息。
有什么方法可以强迫另一个请求吗?我是否必须自定义适配器?
答案 0 :(得分:1)
您应该可以在模型上调用reload。请参阅此处的文档:http://emberjs.com/api/data/classes/DS.Model.html#method_reload
所以对你:
App.BooksBookRoute = Ember.Route.extend({
model: function(params){
return this.store.find('list', params.id).then(function (book) {
return book.reload();
}
}
})