0

注意:这不是这个问题的副本,因为答案对我没有帮助。

我有我的主文件 (Main.mxml),我有一个主 AS 文件 (main.as)。main.as 包含在 Main.mxml 中,通过<fx:Script source="main.as"/>. 在 main.as 中,我想更改 Main.mxml 的 currentState。我该怎么做呢?

我已经尝试过的事情:

  • this.parent.currentState = "c_main";
  • this.parentDocument.currentState = "c_main";
  • this.parentApplication.currentState = "c_main";
  • 这个问题的答案。
4

3 回答 3

1

这是你想要做的吗?


主.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       addedToStage="_onStaged(event)"
                       stateChangeComplete="_stateChangeCompleteHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:states>
        <s:State name="c_main"/>
    </s:states>

    <fx:Script source="main.as" />
</s:WindowedApplication>

主要作为:

import flash.events.Event;
import mx.events.FlexEvent;


// ActionScript file
private function _onStaged(event:Event = null):void
{
    this.currentState = "c_main";
}

protected function _stateChangeCompleteHandler(event:FlexEvent):void
{
    trace("the state was set to "+this.currentState);
}
于 2011-05-14T03:45:22.017 回答
0

解决方案是将应用程序的 currentState 绑定到一个变量。请参阅下面的示例/概念验证(在 Flex 4.6 中测试和工作):

主要作为:

[Bindable]
public var curState:String = "c_main";

protected function swapState():void
{
if(curState=="c_main")
    curState="c_main2";
else
    curState="c_main";
} 

主要.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx"
           currentState="{curState}">   
  <s:states>
    <s:State name="c_main"/>
    <s:State name="c_main2"/>
  </s:states>

  <fx:Script source="Main.as"/>
  <s:VGroup>
 <s:Label text="1" includeIn="c_main" />
 <s:Label text="2" includeIn="c_main2" />
 <s:Button label="switch" click="swapState()"/>
  </s:VGroup>
</s:Application>
于 2011-12-20T19:09:04.487 回答
-1

代替

this.currentState = "c_main"; 

只需使用

currentState = "c_main";

它工作正常!

于 2011-08-14T17:41:20.687 回答