2014-12-15 3 views
0

이것은 내가 그것을 대답하는 방법을 잘 모르겠어요 질문, 나는이 같은 중첩 된 경로가 있습니다 :Emberjs 중첩 된 경로 및 자원

Router.map(function() { 
    this.resource('pages', function(){ 
     this.resource('page', { path: '/:id' }, function(){ 
      this.route('edit', function(){ 
       this.resource('images', function(){ 
        this.resource('image', { path: '/:id'}, function(){ 
         this.route('edit'); 
        }) 
       }); 
      }); 
     }); 
    }); 
}); 

그러나 것은 내가 알고하지 않는 것이 내 수정 경로 (this.route('edit', function(){}))는 route 또는 resource이어야합니다. 내 응용 프로그램에서, 나는이 같은 이동 것이기 때문에

: 는

/pages/ =>/pages/1/ =>pages/1/edit =>/pages/1/edit/images =>/pages/1/edit/images/2

(의 이미지에 대한 페이지 ID 1과 2를 보자) 하지만 하나의 문제는 내가 이렇게 설정할 때입니다.

page = this.modelFor ('page');

{{#each item in model}} 
    {{#link-to "image" page item}} 
     {{list-row item=item}} //component to display row in a table 
    {{/link-to}} 
{{else}} 
    {{no-items}} 
{{/each}} 

링크 내 목록은 다음과 같습니다

/pages/1/edit/images/1 
/pages/2/edit/images/2 
/pages/3/edit/images/3 

그것은 내가 그이 가능 방법을 이해하지 않는 이미지와 동일한 ID를 사용하는 페이지 ID 같다 :/

[편집] :

/images/ 내부의 이미지를 클릭하면 전환이 2 번 발생하고 콘솔에 디버그로 표시됩니다 :

 Rendering image with default view <[email protected]:default::ember844> Object {fullName: "view:image"} 
vendor.js:28547 Could not find "image.index" template or view. Nothing will be rendered Object {fullName: "template:image.index"} 
vendor.js:28547 Transitioned into 'pages.page.edit.images.image.index' 
vendor.js:28547 Could not find "images.index" template or view. Nothing will be rendered Object {fullName: "template:images.index"} 
vendor.js:28547 Transitioned into 'pages.page.edit.images.index' 

[EDIT2] : 내 페이지 (I 그 경로에 대해 동일한 경고를했다)에 대한 폴더를 만든 후

, 그것은 나에게이 제공 :

Could not find "pages" template or view. Nothing will be rendered Object {fullName: "template:pages"} 
vendor.js:28547 Rendering pages.index with default view <[email protected]:default::ember518> Object {fullName: "view:pages.index"} 
vendor.js:28547 Transitioned into 'pages.index' 

[EDIT3] 내 응용 프로그램 구조가 다음과 같은 경우 콘솔 출력입니다.

- templates/ 
- pages.hbs 
- page.hbs 
- //other resources 


generated -> route:pages.index Object {fullName: "route:pages.index"} 
webmob/routes/pages.js:12 DEBUG: Already log in 
VM69786:161 Ember Inspector Active 
vendor.js:28547 Rendering application with default view <[email protected]:toplevel::ember480> Object {fullName: "view:application"} 
vendor.js:28547 Rendering pages with default view <[email protected]:default::ember489> Object {fullName: "view:pages"} 
vendor.js:28547 generated -> controller:pages.index Object {fullName: "controller:pages.index"} 
vendor.js:28547 Could not find "pages.index" template or view. Nothing will be rendered Object {fullName: "template:pages.index"} 
vendor.js:28547 Transitioned into 'pages.index' 
vendor.js:28547 generated -> route:page.index Object {fullName: "route:page.index"} 

나는 모든 것이 올바르게 표시되지만 항상 경고를 표시합니다. 내가 만들 때 페이지는 다음과 같이 폴더 :

- templates/ 
    - pages/ 
     - index.hbs //empty file 
    - pages.hbs 
    - page.hbs 
    - //other resources 

내 콘솔이 있습니다

generated -> route:pages.index Object {fullName: "route:pages.index"} 
webmob/routes/pages.js:12 DEBUG: Already log in 
vendor.js:28547 Rendering application with default view <[email protected]:toplevel::ember419> Object {fullName: "view:application"} 
vendor.js:28547 Rendering pages with default view <[email protected]:default::ember428> Object {fullName: "view:pages"} 
vendor.js:28547 generated -> controller:pages.index Object {fullName: "controller:pages.index"} 
vendor.js:28547 Rendering pages.index with default view <[email protected]:default::ember443> Object {fullName: "view:pages.index"} 
vendor.js:28547 Transitioned into 'pages.index' 
vendor.js:28547 generated -> route:page.index Object {fullName: "route:page.index"} 
VM70411:161 Ember Inspector Active 

답변

1

내 프로젝트 중 하나에서, 내가 유사한 문제 비틀 거렸다. (내 유형의 이름이 아니라 자신의 ID를 사용하기 때문에) /projects/MyNewProject/edit/type/RandomType : I에 액세스하고있는 프로젝트 내 유형을 편집 할 수 있습니다

// Routing map 
App.Router.map(function() { 
    this.resource('projects', function() { 
     this.resource('project', {path: ':name'}, function() { 
      this.resource('edit', function() { 
       this.resource('type', {path: '/type/:type_name'}); 
      }); 
     }); 
    }); 
}); 

: 난 그냥 내 소스 코드를 확인했습니다.

난 당신이했던 것과 똑같은 동작을 알아 차리지 기억 : 나는 두 projecttype 자원 :name을 사용하는 경우, 생성 된 링크는 /projects/MyNewProject/type/MyNewProject 같은 것을 할 것이다. 따라서 pageimage 리소스에 대해 동일한 :id 매개 변수를 사용하는 것이 문제의 원인 일 수 있습니다.image 리소스에 대해 :image_id을 시도하고 page 리소스에 대해 :id을 고수 할 수 있습니다. 첫 번째 edit 경로에 대한 route 또는 resource을 사용할지 여부에 대한 질문의 다른 측면에 관해서는

는, 상기 Ember Routing guide 당신은 명사를 표현 URL에 this.resource를 사용하기위한 this.route해야한다 "고 제안 그 명사를 수정하는 형용사 또는 동사를 나타내는 URL. "

"작업"경로 안에 "리소스"경로가 중첩되어 있으므로 예제에서는 그리 간단하지 않습니다. 귀하의 경로 (이미지)의 끝 점이 자원이므로 resource을 사용해야한다고 생각합니다.

+0

오 마이 갓! 그게 너무 논리적 인 ... 많은 많은 감사합니다! 나는 또한 나의 라우터를'resource'로 바꾼다. 그리고 잘 작동한다. 하지만 마지막으로 한 가지 문제가 있습니다. URL이'/ pages/2/edit/images/1'가 아닌'/ pages/2/edit/images' 이미지를 클릭하면, 좋은 이드이지만 자동으로 이미지로 리디렉션됩니다. 왜 그럴까요? (2 전환을 ...) – SuperMarco

+0

나는이 남은 문제에 대한 단서를 가지고 있지 않습니다. LOG_TRANSITIONS 및/또는 LOG_TRANSITIONS_INTERNAL 플래그를 사용하여 Ember 응용 프로그램을 인스턴스화하려고 시도 했습니까? (http://emberjs.com/guides/understanding-ember/debugging/ 참조) – Benito

+0

나는 이미 깃발을 가지고 있으며, 나는 주요 주제를 업데이트했다. 나는 그 경고를 고칠 때도 여전히 같은 문제가있다. – SuperMarco