2013-07-25 81 views
1

Possible Duplicate動態段不燼工作

我的代碼很簡單,我的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. 我在做什麼錯了?

回答

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不是您在路由器中定義的方式是。推薦的方法是配置你的路由器,如:

WebApp.Router.map(function() { 
    this.resource('sites', { path: '/' } , function() { 
     this.resource('site', { path: ':site_id' }); 
    }); 
}); 
+0

感謝的人,是你提到下來的辦法就是我做它的方式,但我在燼一個新的,所以我不知道這是否是這樣寫的。爲什麼你這個'this.resource('site',{path:':site_id'})'而不是'this.route('site',{path:':site_id'})'?它也與'路線' – Canttouchit

+0

一起工作「經驗法則是使用資源名詞,形容詞(收藏)或動詞(編輯)的路線。」 - http://emberjs.com/guides/concepts/naming-conventions/它也使路由更清潔linkTo,例如。網站和網站,而不是網站和sites.site – RyanHirsch