2010-04-14 1 views
0

나는 데이터의 다음 조각 및 관련 설정 기능이 포함 된 TableDataViewer라는 구성 요소가 있습니다주문 기능을 설정하는

 [Bindable] 
     private var _dataSetLoader:DataSetLoader; 
     public function get dataSetLoader():DataSetLoader {return _dataSetLoader;} 
     public function set dataSetLoader(dataSetLoader:DataSetLoader):void { 
      trace("setting dSL"); 
      _dataSetLoader = dataSetLoader; 
     } 

     [Bindable] 
     private var _table:Table = null; 
     public function set table(table:Table):void { 
      trace("setting table"); 
      _table = table; 
      _dataSetLoader.load(_table.definition.id, "viewData", _table.definition.id); 
     } 

다음과 같이 구성 요소가 다른 구성 요소에 중첩됩니다 :

<ve:TableDataViewer width="100%" height="100%" paddingTop="10" dataSetLoader="{_openTable.dataSetLoader}" 
    table="{_openTable.table}"/> 

로그에서 추적을 보면 set table을 호출하면 set dataSetLoader를 호출하기 전에 발생합니다. set table()은 load() 함수를 호출하기 위해 이미 dataSetLoader를 설정해야하기 때문에 부끄러운 일입니다.

내 질문에, 구성 요소를 선언 할 때 집합 함수 호출 순서를 적용 할 수있는 방법이 있습니까?

답변

0

Flex 설명서에 MXML에 설정된 속성의 초기화 순서가 정의되지 않았다고 (어딘가에서 찾을 수없는 경우) 것을 언급합니다. 즉, 때로는 dataSetLoader의 값이 처음으로 설정된 다음 table으로 설정되거나 때로는 반대 방향으로 설정 될 수 있습니다.

invalidateProperties() and invalidateDisplayList()과 같은 Flex 무효화 방법을 사용하면 모든 속성이 설정 될 때까지 기다렸다가 한꺼번에 처리를 수행 할 수 있습니다.

예를 들어, 다음은 문제를 처리하는 방법입니다. 우리는 우리가 모두 tabledataSetLoader 값을 알고있을 때 우리는 commitProperties() 방법에 _dataSetLoader.load(...) 메서드 호출을 이동
참고 :

[Bindable] 
    private var _dataSetLoader:DataSetLoader; 
    private var dataSetLoaderChanged:Boolean = false; 
    public function get dataSetLoader():DataSetLoader {return _dataSetLoader;} 
    public function set dataSetLoader(dataSetLoader:DataSetLoader):void{ 
     trace("setting dSL"); 
     _dataSetLoader = dataSetLoader; 

     dataSetLoaderChanged = true; 
     invalidateProperties(); 
    } 

    [Bindable] 
    private var _table:Table = null; 
    private var tableChanged:Boolean = false; 
    public function set table(table:Table):void { 
     trace("setting table"); 
     _table = table; 

     tableChanged = true; 
     invalidateProperties(); 
    } 

    override protected function commitProperties():void 
    { 
     super.commitProperties(); 

     if (tableChanged || dataSetLoaderChanged) 
     { 
      if (_dataSetLoader != null) 
      { 
       _dataSetLoader.load(_table.definition.id, "viewData", _table.definition.id); 
      } 

      tableChanged = false; 
      dataSetLoaderChanged = false; 
     } 
    } 
+0

우수, 대단히 감사합니다. – Jason

관련 문제