我的代码很简单,我的HTML:
<script type="text/x-handlebars" data-template-name="sites">
<ul>
{{#each controller}}
<li>
{{#linkTo 'sites.index' site}} {{siteName}} {{/linkTo}}
</li>
{{/each}}
</ul>
</script>
我的Ember代码:
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.
我做错了什么?
答案 0 :(得分: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,而您期望的/sites/index/<ID>
的URL与路由器定义的不完全相同事情是这样的。建议的方法是将路由器配置为:
WebApp.Router.map(function () {
this.resource('sites', { path: '/' } , function() {
this.resource('site', { path: ':site_id' });
});
});