1

可能重复

我的代码很简单,我的html:

<script type="text/x-handlebars" data-template-name="sites">
<ul>
    {{#each controller}}
    <li>
        {{#linkTo 'sites.index' site}} {{siteName}} {{/linkTo}}
    </li>
    {{/each}}
</ul>
</script>

我的灰烬代码:

    WebApp.Router.map(function () {
    this.resource('sites', { path: '/' } , function() {
        this.route('index', { path: '/:site_id' })
    });
});


//returns all Sites to display
WebApp.SitesRoute = Ember.Route.extend({
    model: function () {
        return WebApp.Site.find();
    }
});



 WebApp.Site = DS.Model.extend({
      id: DS.attr('integer')
 });


WebApp.Site.FIXTURES = [
{
    id: 1,
    siteName: gff1.com
},
{        
    id: 2,
    siteName: gff2.com
},
{
    id: 3,
    siteName: gff3.com
}
];

我想制作一个链接到的站点列表/sites/index/<ID> 当我运行此代码时,我得到Assertion failed: Cannot call get with 'id' on an undefined object. 了我做错了什么?

4

1 回答 1

1

这里有几个问题。可以在http://jsbin.com/ikozuv/1/edit找到工作版本

问题的原因在于您的模板,当您尝试链接到它时没有定义站点。这应该可以解决该问题

{{#each site in controller}}
<li>
    {{#linkTo 'sites.index' site}} {{site.siteName}} {{/linkTo}}
</li>
{{/each}}

注意:上述方法仍然不是首选方法,请参见下文。

其他问题包括未将 siteName 列为 WebApp.Site 的属性、在模型声明中设置 ID 以及您期望的 url/sites/index/<ID>与路由器定义的方式不同。推荐的方法是配置您的路由器,如:

WebApp.Router.map(function () {
    this.resource('sites', { path: '/' } , function() {
        this.resource('site', { path: ':site_id' });
    });
});
于 2013-07-26T00:48:50.430 回答