2014-07-16 4 views
1

임 extjs 응용 프로그램에서 일하고 있습니다. 우리는 객체의 특정 인스턴스를보고 필드를보고 편집하기위한 페이지를 가지고 있습니다.보기가 extjs에로드 된시기를 어떻게 알 수 있습니까?

우리는 컨트롤러에서 비트를 확보하기 위해 심판을 사용하고 있습니다.

괜찮 았지만 컨트롤러를 더 작은 조각으로 분할하여 관리하기 쉬워졌고 코드에서 경쟁 조건에 의존하고 있다는 것을 깨달았습니다. 다음과 같이

논리는 다음과 같습니다

  • 주어진 볼 수있는 모델을로드하기 위해 호출 객체
  • 넣어의 ID를 추출하기 위해 URL을 구문 분석 컨트롤러
  • 을 초기화한다. 로드 콜백 컨트롤러 부하 방법 호출
    • ...

제어기 부하 방법은이 ID를 사용하여 정보 비트들에 대한 다른 요청을 발생 일부 점포를 생성한다. 그런 다음 조회를 확보하기 위해 일부 조회를 사용하고로드 할 때 상점을 사용하도록 조회를 재구성합니다.

콜백이 아닌 컨트롤러로드 메서드를 즉시 호출하면 실패합니다. ref 메서드는 undefined를 반환합니다.

아마 이것은보기가 존재하지 않기 때문입니다 ... 그러나 우리는 그것을 확인하지 않습니다 - 우리는 단지 서버가 반응하는 시점에로드되는보기에 의존하고 있으며 재앙을위한 조리법처럼 보입니다.

이렇게 어떻게 피할 수 있으며 뷰를 사용하기 전에로드해야합니다.

답변

0

아직 논리를 다시 작성하지는 않았지만 afterrender 이벤트가 내가 원하는 것을 수행하는 것처럼 보입니다.

저장소로드가 반환되고 후속 이벤트가 발생하면 올바른 결과가 산출 될 때까지 기다리는 것처럼 보입니다.

yourNamespace.createWaitRunner = function (completionCallback) { 
    var callback = completionCallback; 
    var completionRecord = []; 
    var elements = 0; 

    function maybeFinish() { 
     var done = completionRecord.every(function (element) { 
      return element === true 
     }); 

     if (done) 
      completionCallback(); 
    } 

    return { 
     getNotifier: function (func) { 
      func = func || function(){}; 
      var index = elements++; 
      completionRecord[index] = false; 

      return function() { 
       func(arguments); 
       completionRecord[index] = true; 
       maybeFinish(); 
      } 
     } 
    } 
}; 

당신이처럼 사용하십시오 :

여기에 좋은 작은 추상화 이런 식으로 뭔가있을 실제로 아직이를 시도하지 않은

//during init 
//pass in the function to call when others are done 
this.waiter = yourNamespace.createWaitRunner(controller.load); 

//in controller 
this.control({ 
       'SomeView': { 
        afterrender: this.waiter.getNotifier 
       } 
      }); 

//when loading record(s) 
Ext.ModelManager.getModel('SomeModel').load(id, { 
    success: this.waiter.getNotifier(function (record, request) { 
     //do some extra stuff if needs be 
     me.setRecord(record); 
    }) 
}); 

그래서 수도 있지 100 %이긴하지만 그 생각은 건전하다고 생각합니다.

관련 문제