我试图获取嵌套路由来请求其他数据,更新记录,然后渲染视图。见下文:
// models
var attr = DS.attr,
hasMany = DS.hasMany,
belongsTo = DS.belongsTo
App.List = DS.Model.extend({
title: attr('string'),
links: hasMany('link')
})
App.Link = DS.Model.extend({
list: belongsTo('list'),
subtitle: attr('string'),
})
// JSON for index route
{
"list": [
{
"id": 532,
"title": "first list"
},
{
"id": 991,
"title": "second list"
},
{
"id": 382,
"title": "third list"
}
]
}
// JSON for list route - /user/532
{
"list":
{
"id": 532,
"title": "list numero uno",
"links" : [1, 2]
},
"link": [
{
"id": 1,
"subtitle": "this is a subtitle of the firsto listo!"
},
{
"id": 2,
"subtitle": "this is a subtitle of a second part in the list"
}
]
}
// routing
this.resource('user', function(){
this.route('list', {path: ':id'})
})
App.UserRoute = Ember.Route.extend({
model: function(){
return this.store.find('list')
}
})
App.UserListRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('list', params.id)
}
})
我希望索引路由显示一个只包含{{title}}的基本列表,然后单击一个将其链接到UserListRoute
,然后再进行另一个ajax调用以使用其他链接数据更新记录。我尝试过添加:
afterModel: function(modal){
model.reload()
}
到UserListRoute
,但它最初使用索引路由模型,然后使用新数据重新加载。我试图避免这种情况,并让它立即发送ajax请求然后呈现内容 - 所以我不希望它依赖于父模型/数据。
答案 0 :(得分:1)
创建不同的记录类型,并从原始类型扩展,或者只使用完全不同的模型。
App.BasicList = DS.Model.extend({
foo: DS.attr()
});
App.FullList = App.BasicList.extend({
//foo
bar: DS.attr()
});
App.UserListRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('fullList', params.id)
}
})
答案 1 :(得分:0)
我尝试使用kingpin2k的答案,并且它在页面刷新上工作,但是从用户索引导航到嵌套仍导致它使用父模型。我弄清楚为什么它没有使用正确的模型。我在用户索引模板上的链接是:
{{#link-to 'user.list' this}} {{title}} {{/link-to}}
因此,正确点击链接会将我重定向到/users/:id
,但会传递所选项目的数据。为了解决这个问题,我做了:
{{#link-to `user.list` id}} {{title}} {{/link-to}}
因此,通过将this
更改为id
,当它转换到路径时,它会使用路径中指定的相应模型。