2014-09-15 5 views
0

첫 번째 emberjs 응용 프로그램을 구축하려고하는 중입니다. 현재 경로에서 최상위 경로가 수정 될 때 해당 상태를 다시 작성하기 위해 중첩 된 경로의 상태를 어떻게 저장할 수 있는지 궁금합니다. emberjs | 경로 및 중첩 된 리소스의 상태를 저장

이 예제를 부여하려면 :

/개요/항목 1/정보에서 사용자의 스위치를 말할 수 다음 /개요/에 반환하고 /개요 그를 리디렉션 할/항목 1

HTML

<div id="navigation"> 
    {{#link-to 'info' class='link' }}Info{{/link-to}} 
    {{#link-to 'overview' class='link'}} Overview {{/link-to}} 
</div> 

JS

App.Router.map(function(){ 
    this.route('info'); 
    this.resource('overview', function() { 
     this.resource('item', { path : '/:item_id'}); 
    }); 
}); 

누군가가 나에게 올바른 접근 방식에 대한 힌트를 줄 수 있다면 정말 좋을 것입니다.

답변

0

목표 달성을위한 다양한 방법이 있습니다. 기본적으로 부모 경로 또는 컨트롤러에 마지막으로 방문한 상태 인 overview/:item_id을 저장해야합니다. 그런 다음 overview 경로 모델을 확인하기 전에이 상태를 확인해야합니다. 상태가 null이 아니면 (사용자가 overview/:item_id에서 일부 항목을 선택했다면) 현재 전환을 중단하고 새 전환을 시작하십시오 ( overview/:selected_item_id). 코드에서

도식 솔루션 :이 방법이 더 쉽게 미래에 overview/:item_id 경로 (this.transitionTo('overview.item', item)에 저장 전달 모델)을로드 할 것이기 때문에

// 1st approach 

App.OverviewController = Ember.ObjectController.extend({ 

    selectedItem: null 
}); 

App.OverviewRoute = Ember.Route.extend({ 

    beforeModel: function(transition) { 
     if (this.get('controller.selectedItem')) { 
      transition.abort(); 
      this.transitionTo('overview.item', this.get('selectedItem')); 
     } 
    } 
}); 

App.OverviewItemRoute = Ember.Route.extend({ 

    afterModel: function(model) { 
     this.controllerFor('overview').set('selectedItem', model); 
    } 
}); 

// 2nd approach (less code) 

App.OverviewRoute = Ember.Route.extend({ 

    beforeModel: function(transition) { 
     if (this.get('controller.selectedItem')) { 
      transition.abort(); 
      this.transitionTo('overview.item', this.get('selectedItem')); 
     } 
    }, 

    setupController: function(controller) { 
     controller.reopen({ selectedItem: null }); 
    } 
}); 

App.OverviewItemRoute = Ember.Route.extend({ 

    afterModel: function(model) { 
     this.controllerFor('overview').set('selectedItem', model); 
    } 
}); 

그것은 항목 자체를 유지하는 것이 중요합니다, 그렇지 그것은 ID입니다.

관련 문제