2009-02-18 7 views
1

J'ai une méthode pour ajouter une structure de nœud XML au nœud d'arborescence actuellement sélectionné.Déclenchement d'un événement de modification dans un contrôle d'arborescence Flex par programmation

Ceci ajoute le fichier XML et ouvre le nœud parent pour afficher le nouveau nœud ajouté. Je sélectionne ensuite le nœud en définissant l'élément sélectionné de l'arborescence.

J'ai un formulaire d'édition qui met à jour ses valeurs sur l'événement de changement d'arbre. Lorsque je définis l'élément selectedItem dans cette méthode, le nœud est sélectionné correctement mais l'événement change ne se déclenche jamais (l'éditeur ne se met donc pas à jour). J'ai essayé de l'appeler dans un bloc d'appel plus tard en vain.

Existe-t-il un moyen de forcer l'arbre à envoyer un événement de changement à ce stade?

public function addSelected(node:XML):void{ 

      tree_expandItem(false);    

      var selectedItem:XML = tree.selectedItem as XML; 

      selectedItem.appendChild(node); 

      tree_expandItem(true); 

      callLater(function():void { tree.selectedItem = node; }); 

     } 

Pour étendre cette question dans une sorte de grand chemin - j'aurais pensé que le changement de selectedItem de l'arbre entraînerait un événement de changement de toute façon? Ou est-ce qu'un changement n'est considéré comme un changement que si l'utilisateur le fait?

Répondre

3

Vous pouvez déplacer la logique qui est actuellement dans votre gestionnaire d'événements de changement à une fonction séparée, puis appeler cette fonction directement:

private function changeHandler(event:ListEvent):void 
{ 
    doChangeLogic(); 
} 

private function doChangeLogic():void 
{ 
    //statements 
} 

public function addSelected(node:XML):void 
{ 
    tree_expandItem(false);       

    var selectedItem:XML = tree.selectedItem as XML; 

    selectedItem.appendChild(node); 

    tree_expandItem(true); 

    callLater(function():void { tree.selectedItem = node; }); 

    doChangeLogic(); 
} 
+0

Yep qui fonctionnera à coup sûr .. imbécile moi .. à la recherche d'une réponse complexe à une question simple .. –

+0

Awesome! Heureux d'avoir pu aider! –

2

Existe-t-il un moyen de forcer l'arborescence à envoyer un événement de modification à ce stade?

Utilisez la méthode dispatchEvent(). Merci James!

+0

c'est en fait la méthode dispatchEvent();) –

+0

droit, merci James. – dirkgently

+0

Cela fonctionnerait aussi, merci –

Questions connexes