我想添加资源(例如sites/5/posts/
- >帖子是我添加的新资源)。
WebApp.Router.map(function () {
this.resource('sites', { path: '/' } , function() {
this.resource('site', { path: '/sites/:site_id'} , function() {
this.resource('posts', { path: 'posts'
}); //posts
}); //sites/id
this.route('new', {path: 'new'});
});
});
我的模板:
<script type="text/x-handlebars" data-template-name="sites">
<ul>
{{#each site in controller}}
<li>
{{#linkTo 'site' this}} {{site.siteName}} {{/linkTo}}
{{#linkTo 'posts'}} > {{/linkTo}}
</li>
{{/each}}
</ul>
{{#linkTo 'sites.new'}} ADD NEW WEBSITE {{/linkTo}}
{{outlet}}
我希望每个列表项都有指向sites/:site_id/posts/
的链接。
将行{{#linkTo 'posts'}} > {{/linkTo}}
添加到模板会生成错误:
Assertion failed: Cannot call get with 'id' on an undefined object.
我做错了什么?
答案 0 :(得分:2)
我做了一些改动:
id
属性,因此我从您的网站和帖子模型中移除了id: DS.attr('integer')
行。导致问题的一行是你的第二个linkTo helper:
{{#linkTo'posts'}}&gt; {{/ linkTo}}
posts
路由(实际上是posts.index
,Ember自动生成)需要一个site
对象,因为它嵌套在site
资源下。您尝试链接的路径为sites/:site_id/posts/
,因此您需要提供一个网站,否则它不知道要显示哪个网站的帖子。
所以你得到一个“无法在未定义的对象上调用id”,这会阻止模板呈现,我假设,因为模板的linkTo帮助器尝试创建一个带有id的链接,但它没有要序列化的对象。 / p>
简而言之,您要做的就是将参数添加回linkTo助手:{{#linkTo 'posts' site}}
。见这里:http://jsbin.com/axaqix/13/edit