1

我的代码 - JSbin

我想添加一个资源(例如sites/5/posts/-> 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.

我做错了什么?

4

1 回答 1

2

我做了一些改变:

  1. 你不应该id在你的模型上设置属性,所以我id: DS.attr('integer')从你的 Site 和 Post 模型中删除了这些行。
  2. 导致问题的行是您的第二个 linkTo helper:

    {{#linkTo 'posts'}} > {{/linkTo}}

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

所以你得到一个“无法在未定义的对象上调用 id”,我假设,因为模板的 linkTo 助手试图创建一个带有 id 的链接,但它没有要序列化的对象。

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

于 2013-07-28T23:26:27.700 回答