Apache flex 以编程方式触发Flex树控件中的更改事件

Apache flex 以编程方式触发Flex树控件中的更改事件,apache-flex,actionscript-3,tree,Apache Flex,Actionscript 3,Tree,我有一个方法可以将XML节点结构添加到当前选定的树节点 这将附加xml,并打开父节点以显示新添加的节点 然后通过设置树的selectedItem来选择节点 我有一个编辑表单,可以在树更改事件中更新其值。当我在这个方法中设置selectedItem时,节点被正确选择,但是更改事件从不触发(因此编辑器不会更新)。我试着在稍后的通话区呼叫它,但没有用 有没有一种方法可以强制树在此时发送更改事件 public function addSelected(node:XML):void{

我有一个方法可以将XML节点结构添加到当前选定的树节点

这将附加xml,并打开父节点以显示新添加的节点

然后通过设置树的selectedItem来选择节点

我有一个编辑表单,可以在树更改事件中更新其值。当我在这个方法中设置selectedItem时,节点被正确选择,但是更改事件从不触发(因此编辑器不会更新)。我试着在稍后的通话区呼叫它,但没有用

有没有一种方法可以强制树在此时发送更改事件

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; } );  

        }
以一种一般的方式扩展这个问题——我会认为更改树的selectedItem会导致一个更改事件?或者,只有在用户做出更改时,更改才被视为更改

有没有一种方法可以强制树在此时发送更改事件

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; } );  

        }
使用dispatchEvent()方法。谢谢你,詹姆斯

有没有一种方法可以强制树在此时发送更改事件

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; } );  

        }

使用dispatchEvent()方法。谢谢你,詹姆斯

您可以将更改事件处理程序中当前的逻辑移动到单独的函数中,然后直接调用该函数:

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();
}

您可以将更改事件处理程序中当前的逻辑移动到单独的函数中,然后直接调用该函数:

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();
}

实际上是dispatchEvent()方法;)实际上是dispatchEvent()方法;)是的,那肯定行。。我真傻。。正在寻找一个简单问题的复杂答案..是的,那肯定有用。。我真傻。。寻找一个简单问题的复杂答案。。