0

我想通过单击一个按钮来重新初始化一个组件。我使用以下代码,但似乎没有发生任何事情。

protected function createItem(event:MouseEvent):void
{
    this.currentState="Viewer";
    this.initialize();
}

为什么?

4

2 回答 2

1

是的,我指的是 Flex 组件生命周期。我知道 flex 有四个步骤来创建组件,但是有没有一种方法可以强制 Flex 再次执行这些步骤?

实际上,Flex 组件生命周期的步骤远不止四个。有关更多信息,请参见此处此处

您可能的意思是,有四个方法作为 Flex 组件生命周期的一部分运行;它们是 createChildren()、commitProperties()、updateDisplayList() 和 measure()。在 MX 架构中,还有一个 layoutChrome() 方法,但并不常用。

在 Flex 4 Spark 架构中;还有很多其他钩子(partAdded()、partRemoved()),但它们都扩展了 MX 架构。

您可能会从使用失效方法中受益:

  • 在组件上运行 invalidateProperties() 以强制 commitProperties() 在下一次渲染事件期间重新执行
  • 在组件上运行 invalidateDisplayList() 以强制 updateDisplayList() 方法在下一次渲染事件期间重新执行
  • 在组件上运行 invalidateSize() 以强制 measure() 方法在下一个渲染事件期间重新执行
  • 在 Flex 4、Spark 组件中,运行 invalidateSkinState() 以强制 getCurrentSkinState() 方法在下一次渲染事件期间重新执行。

    您还可以对 Spark 容器使用 removeChild()--removeElement() 从舞台中删除组件,然后对 Spark 容器使用 addChild()--addElement。这基本上会迫使组件重新启动它的进程。

    您还可以创建组件的全新实例并删除旧实例。

于 2012-10-19T13:47:10.790 回答
0

我已经解决了我的问题。如果我在这里发布我的方法可能会更好。

我只需添加两行来调用服务并将其放入 Compenent 正在使用的变量中,一切正常。

    protected function createItem(event:MouseEvent):void
    {
        this.currentState="Viewer";
        this.initialize();

countResult.token = productdetailService.count();
countResult2.token = getNewProductIDService.count();

    }
于 2012-10-20T06:41:43.803 回答