【问题标题】:Flex4 Application state in a custom componentFlex4 自定义组件中的应用程序状态
【发布时间】:2026-01-31 01:20:03
【问题描述】:

我正在将我的 Flex3 应用程序移植到 Flex4 (FlashBuilder4)。我得到了全新的状态概念,除了一件事。在自定义组件(单独的 mxml 文件)中,我正在使用主级别应用程序的状态。 在 Flex3 中是:

<mx:State name="only_view_mode">
    <mx:RemoveChild target="{myComponent.button1}" />
</mx:State>

在 Flex4 中应该是 类似的

<mx:State name="only_view_mode" />

<mx:LinkButton id="button1" excludeFrom="???" />

我的问题是:如何从组件访问应用程序状态?我当然检查了官方参考 (http://www.adobe.com/go/learn_flex4_alldocumentation_en) 和 Google,但没有任何成功。

提前致谢

【问题讨论】:

    标签: actionscript-3 apache-flex flex4 flash-builder viewstate


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      这并没有真正起作用,因为它需要一个字符串。我以我能想到的所有可能的方式进行了尝试。到目前为止,我提出了这个非常丑陋的解决方案:我添加了一个事件侦听器,用于检查我的主级别组件的状态更改:

      <?xml version="1.0" encoding="utf-8"?>
      <s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               creationComplete="{onCreationComplete();}">
          <fx:Script>
              <![CDATA[
                  import mx.core.FlexGlobals;
                  import mx.events.StateChangeEvent;
                  private function onCreationComplete():void {
                      FlexGlobals.topLevelApplication.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onStateChanged);
                  }
      
                  private function onStateChanged(event:StateChangeEvent):void {
                      currentState = event.newState;
                  }
              ]]>
          </fx:Script>
          <s:states>
              <s:State name="default" />
              <s:State name="login" />
          </s:states>
          <s:TextArea includeIn="login"/>
      </s:Panel>
      

      如果有更好的解决方案,请告诉我。顺便说一句,我有一种预感,State 组件的 basedOn 属性是要走的路。但不知道它期望什么样的格式:

          <s:State name="login" basedOn="???" />
      

      【讨论】:

        最近更新 更多