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

时间:2009-02-18 01:13:47

标签: flex actionscript-3 tree

我有一种方法可以将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会导致更改事件吗?或者,如果用户更改,则更改仅被视为更改?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

  

有没有办法可以强制树在此时调度更改事件?

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