2011-12-20 5 views
10

적절한 절차 또는 최소한 sproutcore-routing을 사용하는 일반적인 절차가 궁금합니다. 에서 sproutcore-routing을 사용하기위한 적절한 절차

는 IT 라우팅이 기본 예를 보여줍니다이 나를 읽어 : 나는 대부분의 경우 MyApp.route 제공된 컨트롤러의 공급 액션을 호출 것이라고 믿고있어

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route); 

. 제 질문은이 단계를 넘어서는 많은 기본보기가있는 응용 프로그램의 설정/해제 방법을 다루는 방법에 대한 것입니다.

컨트롤러가 항상 깨끗한 데이터 및 뷰로 시작하도록 변경되면 새 컨트롤러를 인스턴스화합니까? 또는로드시 모든 컨트롤러를 인스턴스화하고 기본보기를 표시/숨기기위한 라우팅을 사용하는 것이 더 일반적입니까/권장입니까?

컨트롤러 내에서 동작 사이에 튀어 오를 때 같은 질문을한다고 가정합니다. 특히 바인딩/청취자에게 약간의 해체를하는 것이 적절합니까? 그런 다음 작업이 리콜되면 다시 설정하는 것이 좋습니까?

내 질문이 약간 퍼지 수도 있지만 기본적으로 사람들이 여러 가지 기본보기를 처리하는 방법에 대해 궁금해하고 있으며 정리 작업을 처리하여 물건이 부실하거나 많은 리소스를 씹을 수는 없습니다.

답변

2

내가 본 대부분의 Ember 및 Sproutcore 앱 및 예에서 컨트롤러는 앱 초기화시에 인스턴스화됩니다. 루트는 상태 차트에서 상태 변경을 유도하며 컨트롤러는 업데이트되고 필요에 따라 뷰가 생성/삭제됩니다.

2

다음과 같은 설정이 있습니다. 내 Ember.Application.create에서

() 나는이 다음 코드 : 그런 다음

MyApp.routes = Em.Object.create({ 
     currentRoute: null, 

     gotoRoute: function(routeParams) { 
      console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id); 
      if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) { 
       //find item with ID and load in controller 
       MyApp.MyController.findItemWithId(routeParams.id); 
       //Navigate to the correct state 
       MyApp.stateManager.goToState('stateName'); 
      } 
     } 
    }) 

    SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute'); 

, 나는 변경하기 위해 URL을 야기한다 것들에 클릭 할 때 내가 수행

SC.routes.set("location", "show/item/ID-123-123"); 

이제 앱에서 URL의 변경 내용을 듣고 URL 부분을 기반으로 올바른 작업을 수행해야합니다.

아마도 MyApp.MyController.findItemWithId (routeParams.id); 상태 차트의 enter() 함수 (사용하는 경우)에 전달하지만 해당 ID를 일부 컨트롤러의 어딘가에 저장해야합니다.