2012-08-13 3 views
1

하나의 PC에서 MySQL 데이터베이스에서 검색 한 레코드 모음으로 채워진 arraycollection 인 dataprovider가있는 DataGrid가 있습니다. 다른 PC에서는 다른 구성 요소가 동일한 레코드 컬렉션을 검색하여 업데이트합니다. Instanly, PC 1의 DataGrid는 PC 2에서 변경된 사항을 반영했는데, 이는 영향을받는 모든 컨트롤에 온라인으로 변경 사항을 적용했기 때문에 좋습니다. 그러나 ArrayCollection 변경 사항을 감지하여 다른 작업을 수행하려고하지만 CollectionEvent.COLLECTION_CHANGE가 감지되지 않습니다. 제발 도와 줄 수있어? 코드는 다음과 같습니다.Flex에서 CollectionEvent 변경을 감지합니다

protected function doInit():void 
{ 
acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcLeaveChange); 
} 

protected function onAcLeaveChange(event:CollectionEvent):void 
{ 
do something 
} 

나는 lcds를 사용하고 있으며 데이터 관리 서비스가 이미 데이터 동기화를 처리했습니다. 그래서 데이터 그리드 데이터 공급자 acLeave가있는 첫 번째 PC가 자동으로 변경됩니다. 어떻게 든 LCD는 클라이언트 (PC 하나)가 온라인 상태라는 사실을 알고 있기 때문에 변경 사항을 푸시합니다. 내 질문은 데이터 그리드 데이터가 변경되었습니다, 나는 다른 업데이 트를 할 수 있도록 데이터 변경이 발생 감지하고 싶습니다. 일반적으로 DataGrid 변경을 감지하기 위해 datagrid datachange를 사용하거나 단순히 addListener를 collectionEvent.COLLECTION_CHANGE에 대한 데이터 공급자에 사용할 수 있지만이 경우 AC acLeave가 변경된 것을 볼 수는 있지만 이벤트가 실행되지 않았습니다. 도와주세요!

안녕하세요. 다시 한 번 조언 해 주셔서 감사합니다. setter를 acLeave에 추가했지만 collectionEvent 변경 내용을 수신 할 수 없습니다. 다음은 수정 된 코드는 다음과 같습니다

private var _acLeave:ArrayCollection = new ArrayCollection(); 

[Bindable] 
public function get acLeave():ArrayCollection 
{ 
    return _acLeave; 
} 
public function set acLeave(value:ArrayCollection):void 
{ 
    _acLeave = value; 
} 
protected function doInit():void 
{ 
    acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcChange); 
} 

protected function dataGrid_creationCompleteHandler(event:FlexEvent):void 
{ 
    getAllResult.token = leaverequestService.getAll(); 
    getAllResult.addEventListener(ResultEvent.RESULT, onGotResult); 
} 

protected function onGotResult(event:ResultEvent):void 
{ 
    acLeave = getAllResult.lastResult; 
} 

protected function onAcChange(event:CollectionEvent):void 
{ 
    // this never executed because unable to detect a change on acLeave 
    Alert.show("acLeave Changed !"); 
} 
+0

두 개의 개별 PC가 서버를 통해 동일한 "데이터 소싱"의 변경 사항을 반영 할 수있는 유일한 방법입니다. 일부 유형의 푸시 기능을 사용할 가능성이 가장 높습니다. 한 PC에서 항목을 변경하더라도 다른 PC에서는 COLLECTION_CHANGE 이벤트가 실행되지 않습니다. – JeffryHouser

+0

Flextras에 동의 : 다른 PC의 원격 컬렉션은 어떻게 업데이트되고 있습니까? 이벤트를 수신 할 수 있고 업데이트가 발생하면 원래 컬렉션이 변경되지 않고 완전히 새로운 ArrayCollection이 생성되어 두 번째 PC로 전송 (또는 검색)됩니다. 이런 일이 발생하면 원래 컬렉션에서 변경 이벤트가 생성되지 않습니다. –

답변

0

컬렉션 변경 핸들러가 일어나고, 나는 이런 식으로 뭔가를 추측하고 발사되지 않은 경우 :

  • PC1이 PC2 컬렉션을 변경
  • 컬렉션을 변경 청취자를 추가
  • LCD는 PC1에게
를 사용하는 새로운 ArrayCollection 객체 (변경뿐만 아니라 요소)를 보낸다 0

원본 ArrayCollection 컬렉션을 청취하고 있습니다. 변경이 반드시 변경되는 것은 아니며, 이 (가)으로 바뀌 었습니다. 따라서 수집 변경 이벤트는 발생하지 않습니다.

ArrayCollection (예 : acLeave)에 대한 설정 메서드를 추가하면 이것이 발생했는지를 알 수 있습니다. 기술적으로 배열을 변경할 수있는 모든 경우를 감지 할 수 있으려면 컬렉션 변경 이벤트와이 설정자를 모두 사용해야합니다.

관련 문제