2012-09-07 3 views
1

Flex 4.6에서 MX Tree 컨트롤을 사용하고 있습니다. 해당 데이터 공급자는 중첩 ArrayCollection입니다. 컨트롤이 작동하는 방식은 트리 노드가 확장되면 이벤트를 감지하고 서버에서 데이터를 가져 오는 다른 구성 요소로 이벤트를 버블 링하고 ArrayCollection (즉, 클릭 된 분기의 ArrayCollection)을 업데이트한다는 것입니다. 그러나 업데이트 된 데이터는 특정 분기를 닫고 다시 확장 할 때까지 트리에 표시되지 않습니다.flex 4 트리 컨트롤이 업데이트되지 않습니다.

예.

  • + 폴더 1
  • + 폴더 2
  • + 폴더 사용자는 폴더 (1) 데이터가 백엔드로부터 페치 및 추가 확장시 초기 폴더 1 어린이 3

비어있는 ArrayCollection이고 자식 ArrayCollection에 전달합니다. 그러나 이것은 폴더 1 아래의 아이들을 보여주지 않습니다. 만약 내가 폴더 1을 닫고 그것을 다시 열면 그것은 나타납니다. 데이터가 ArrayCollection에 추가되면 디스플레이를 업데이트해야한다고 생각했습니다. 어떤 사람이 내가 잘못하고있는 일을 알려주시겠습니까? 내 경험에

답변

0

는 그 목록을 다시 그려야 할 Tree 컨트롤 통지 일했다 다음

  • arrayCollection.refresh를();
  • tree.invalidateList();
+0

하지만 TreeCell 클래스는 이벤트를 변경하고 명시 적으로 호출되는 invalidateList()없이 변경이 발생하면 Tree 클래스가 변경 사항을 수신 할 것이라고 생각했습니다. ArrayCollection 클래스를 사용하는 이유가 아닙니까? –

+1

어떤 경우에는 Tree에서 invalidateList()를 호출해야하는 경우가 있습니다. 귀하의 ArrayCollection이 중첩되어 있다고합니까? ArrayCollection의 ArrayCollection은 어떻게 구성되어 있습니까? 아마도 중첩 된 ArrayCollection을 추가하지 않고 바꿀 경우 Tree에 올바르게 통지됩니다. –

+0

ArrayCollection의 각 항목에는 차례대로 ArrayCollection 인 children 객체가 있습니다. 부모 ArrayCollection은 내 모델의 일부이며 트리는 UI 구성 요소에 있습니다. 컨트롤러 구성 요소는 UI의 모델을 ArrayCollection에 바인딩합니다. 사용자가 트리 노드를 열면 UI에서 이벤트를 감지하고 자식을 업데이트하는 컨트롤러 구성 요소로 보냅니다. 이 트리는 CollectionChange 이벤트를 청취하기로되어 있기 때문에 트리를 자동으로 업데이트해야합니다. 이것은 작동하지 않는 부분입니다. 곧 더 명확하게 할 수있는 코드 개요를 추가하려고 노력할 것입니다. –

0

문제점에 대한 해결책을 찾았습니다. 자식 ArrayCollection 클래스 중 하나가 업데이트되면 주 ArrayCollection 클래스에서 itemupdated를 호출해야합니다. 이렇게하면보기가 올바르게 업데이트됩니다. 위의 예제에서 사용자가 Folder 2를 클릭하면 Folder 2의 children arraycollection에 데이터를 추가하는 모델에 이벤트가 전파되고 일단이 작업을 수행하면 폴더 2로 업데이트 된 항목이 포함 된 주 ArrayCollection에서 itemupdated를 호출해야합니다 ,이 트리보기를 올바르게 업데이트했습니다.

관련 문제