2013-07-25 2 views
1

Possible Duplicate동적 세그먼트는 타다 남은 작동하지

내 코드는 내 html로 매우 간단하다 : 나는있는 사이트의 목록을 만들고 싶어

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 
} 
]; 

:

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

내 엠버 코드 /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}} 

참고 : 위의 내용은 여전히 ​​바람직한 방법은 아닙니다. 아래를 참조하십시오.

다른 문제로는 WebApp.Site에 대한 특성으로 siteName을 나열하지 않고 모델 선언에 ID를 설정하고 예상하는 URL을 /sites/index/<ID>으로 지정하는 것이 라우터 정의 방법과 완전히 다릅니다. 입니다. 권장 방법은 다음과 같이 라우터를 구성하는 것입니다.

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

감사 인사, 네가 언급 한 방식은 내가 해낸 방법이지만 나는 엠버에서 새로운 것입니다. 그런 식으로 쓰는 것이 옳습니다. 왜 this.ourute ('site', {path : ': site_id'})'대신에 this.resource ('site', {path : ': site_id'})'를 사용 했습니까? – Canttouchit

+0

"엄지 손가락의 규칙은 명사와 형용사 (즐겨 찾기) 또는 동사 (편집)를위한 경로를 사용하는 것입니다." - http://emberjs.com/guides/concepts/naming-conventions/ 또한 linkTo를 위해 라우트를 더 깨끗하게 만듭니다. 사이트 및 sites.site 대신 사이트 및 사이트 – RyanHirsch

관련 문제