我有一个嵌套的路由设置,因为我希望我的模板也可以嵌套。路线设置如下:
...
this.route('posts', function() {
this.route('post', {path: ':post_id'}, function() {
this.route('comments', {path: 'comments'}, function() {
this.route('comment', {path: ':comment_id'});
});
});
});
...
我的网址可能看起来像这样:
/posts/:post_id/comments/:comment_id
如果我通过{{link-to}}
导航,那么我没有问题,但是,如果我通过浏览器直接访问特定的网址,那么当出现问题时我就会这样做。想象一下,我的评论页面列出了与我正在查看的帖子(post_id)相关的评论。问题是直接进行,例如输入/posts/123/comments/56
并不加载评论列表,只加载评论本身。以下是我的路线设置方式:
// routes/posts.js
...
model() {
return this.get('store').findAll('post');
}
...
// routes/posts/post.js
...
model(params) {
return this.get('store').findRecord('post', params.post_id);
}
...
// routes/posts/post/comments.js
...
model(params) {
let post=this.modelFor('posts/post');
return post.get('comments');
}
...
// routes/posts/post/comments/comment.js
...
model(params) {
return this.store.findRecord('comment', params.comment_id);
}
...
如果我输入/posts/123/comments/56
,则comments.js模板中不会显示任何列表。
如果我输入/posts/123/comments
,则只会在comments.js中显示第一条评论。
虽然我觉得它与modelFor有关,但我不确定我做错了什么。当我直接在该帖子网址中发表评论而不是通过链接到那里导航时,如何正确填充/补充帖子的评论列表?
更新1: 以下是模型:
// post.js
export default DS.Model.extend({
title: DS.attr("string"),
articles: DS.hasMany('comment', {async: true})
});
// comment.js
export default DS.Model.extend({
title: DS.attr("string")
});
我把它连接到海市蜃楼。
以下是评论夹具的示例:
[
{
id: 1,
title: "Apple"
},
...
和帖子夹具:
[
{
id: 1,
title: "A post with fruits for comments",
commentIds: [1, 2]
},
...
更新2:
我已添加templates/posts/post/comments.js
Comments.js!
{{outlet}}
<ol>
{{#each model as |comment|}}
<li>{{#link-to "posts.post.comments.comment" comment}} {{comment.title}}{{/link-to}}</li>
{{/each}}
</ol>
我还更新了上面的comment.js路线,降低了它的复杂程度。
答案 0 :(得分:0)
根据您的路由器定义 - URL / post / 123 / comments / 56不存在。您的路由器使用以下结构定义URL / posts / 56 / comment / 123(注意单个注释而不是注释) - 您的路由名称是注释,但是您告诉ember它应该解析的路径是注释 - 单数。因此,尝试访问/ post / 123 / comment / 56而不是评论。 此外,没有理由从嵌套注释路由调用this.modelFor('posts / post') - 你应该需要的是modeFor('post')。 最后一点,在评论路线中你应该只需要寻找一个评论,无需解析父模型 - 你已经有了一个唯一的comment_id - store.findRecord('comment',comment_id)应该可以工作。