Ember.js - 嵌套资源模板错误:“无法在未定义的对象上使用'id'调用get”

时间:2013-07-28 20:15:31

标签: ember.js ember-data

My Code - JSbin

我想添加资源(例如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.

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我做了一些改动:

  1. 您不应在模型上设置id属性,因此我从您的网站和帖子模型中移除了id: DS.attr('integer')行。
  2. 导致问题的一行是你的第二个linkTo helper:

    {{#linkTo'posts'}}&gt; {{/ linkTo}}

    posts路由(实际上是posts.index,Ember自动生成)需要一个site对象,因为它嵌套在site资源下。您尝试链接的路径为sites/:site_id/posts/,因此您需要提供一个网站,否则它不知道要显示哪个网站的帖子。

  3. 所以你得到一个“无法在未定义的对象上调用id”,这会阻止模板呈现,我假设,因为模板的linkTo帮助器尝试创建一个带有id的链接,但它没有要序列化的对象。 / p>

    简而言之,您要做的就是将参数添加回linkTo助手:{{#linkTo 'posts' site}} 。见这里:http://jsbin.com/axaqix/13/edit