重新初始化组件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重新初始化组件相关的知识,希望对你有一定的参考价值。

我想通过单击按钮来重新初始化组件。我使用下面的代码,但是似乎什么都没有发生。

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

为什么?

答案

是的,我指的是Flex组件的生命周期。我知道那里有Flex创建组件的四个步骤,但是有没有一种方法强制Flex重新执行这些步骤?

实际上,Flex Component Lifecycle的步骤远不止四个。有关更多信息,请参见herehere

您的意思是,作为Flex Component LifeCycle的一部分,有四种方法在运行;分别是createChildren(),commitProperties(),updateDisplayList()和measure()。在MX体系结构中,还有一个layoutChrome()方法,但这并不常用。

在Flex 4 Spark体系结构中;还有很多其他挂钩(partAdded(),partRemoved()),但它们都从MX体系结构扩展而来。

您可能会受益于使用无效方法:

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

    [您还可以使用removeChild()-用于Spark容器的removeElement(),然后使用addChild()-用于Spark容器的addElement从舞台中删除组件。这实际上将迫使该组件重新启动其过程。

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

另一答案

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

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

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

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

    }

以上是关于重新初始化组件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jetpack 的 Android 导航组件销毁/重新创建的片段

如何打开关闭应用程序后打开的最后一个片段并使用导航抽屉和导航组件重新打开它

重新添加相同的片段后片段中的元素不起作用

重新初始化组件

使用导航组件时,片段 savedInstanceState 始终为空

使用导航架构组件添加(而不是替换)片段