我有以下路线
App.Router.map(function() {
this.resource('gradebooks', function() {
this.resource('gradebook', { path: ':gradebook_id' });
});
});
App.GradebooksRoute = Em.Route.extend({
model: function() {
return this.store.find('gradebook');
}
});
App.GradebookRoute = Em.Route.extend({
model: function(params) {
var id = params.gradebook_id;
var gradebook = this.store.find('gradebook', id);
var self = this;
gradebook.then(null, function(reason) {
self.transitionTo('gradebooks');
});
return gradebook;
}
})
模板:
<ul>
{{#each}}
<li {{bind-attr class="isActive:active"}}>
{{#link-to "gradebook" this}}
{{title}}
{{/link-to}}
</li>
{{/each}}
</ul>
{{outlet}}
除非给出无效的ID,否则它的工作正常且花花公子。 (例如#/gradebooks/invalid_id
)。
目前,重定向效果很好(我确实收到了错误Error while loading route: TypeError: Cannot read property 'id' of undefined
,但仍然会重定向。但是,生成的成绩单列表在列表中的成绩单无效。
如果我手动导航到#/gradebooks/invalid_id_1
,#/gradebooks/invalid_id_2
,#/gradebooks/invalid_id_3
等,则每次都会将无效成绩单添加到成绩单列表中。
任何想法为什么?或者有更好的解决方案吗?
答案 0 :(得分:0)
而不是手动处理find模型承诺最好让ember这样做,如果找到它会触发错误事件 承诺被拒绝
App.GradebookRoute = Em.Route.extend({
model: function(params) {
var id = params.gradebook_id;
return this.store.find('gradebook', id);
},
actions: {
error: function(reason) {
alert(reason); // "FAIL"
// Can transition to another route here, e.g.
// transitionTo('gradebooks');
// Uncomment the line below to bubble this error event:
// return true;
}
})