如何在Flex 3中的ActionScript3.0中调用MXML类

时间:2009-08-14 17:08:58

标签: actionscript flex3 mxml

我有一个由自定义组件组成的页面。在那个页面我有一个按钮。如果我单击按钮,我必须调用另一个页面(page.mxml由自定义组件组成)。然后单击事件处理程序在Action-script中写入一个单独的文件中。

如何在ActionScript中创建MXML类的对象?如何显示对象(即页面)?

我的代码:

page1.mxml

<comp:BackgroundButton x="947" y="12" width="61" height="22" 
      paddingLeft="2" paddingRight="2" label="logout" id="logout"
      click="controllers.AdminSession.logout()"
 />

此page1.mxml必须使用另一个类中的ActionScript代码调用page2.mxml:

static public function logout():void {
   var startPage:StartSplashPage = new StartSplashPage();
}

3 个答案:

答案 0 :(得分:3)

您的Actionscript类需要对显示列表的引用才能将您的组件添加到舞台上。 MXML只是声明性的动作脚本,因此在Actionscript中创建实例或使用MXML表示法之间没有区别。

你的职能:

static public function logout():void {
   var startPage:StartSplashPage = new StartSplashPage();
}

可以更改为:

static public function logout():StartSplashPage {
   return new StartSplashPage();
}

或:

static public function logout():void {
   var startPage:StartSplashPage = new StartSplashPage();
   myReferenceToDisplayListObject.addChild( startPage );
}

如果您的动作脚本没有对显示列表的引用,则无法将自定义组件添加到显示列表中。添加基于MXML的自定义组件与将任何其他DisplayObject添加到显示列表没有区别:

var mySprite:Sprite = new Sprite();
addChild(mySprite)

与:

相同
var startPage:StartSplashPage = new StartSplashPage();
myReferenceToDisplayListObject.addChild( startPage );

Sprite和StartSplashPage都是DisplayObject的核心扩展。

您在评论中将MVC引用到另一个答案。如果不了解您已实现的特定框架,或者根据您尝试执行此操作的上下文提供更多代码,则很难给出更具体的答案。

答案 1 :(得分:0)

我认为你可以用州来工作。

您可以查看http://blog.flexexamples.com/2007/10/05/creating-view-states-in-a-flex-application/#more-221

修改: 我不确定我完全理解你的情况。

据我所知,您可以在page1.mxml中创建一个新状态,并将其命名为,例如。 secondPageState,然后将自定义组件page2.mxml放在secondPageState中。

在控制器中,您需要一个import语句来导入page1组件并为page1组件创建一个public var,例如。第一页。

然后,代码类似于: public function logout():voild {    firstPage.currentState =“secondPageState”; }

另一个解决方案: 如果您不喜欢更改状态解决方案,则可以尝试使用addchild将自定义组件添加到应用程序中。

答案 2 :(得分:0)

我假设您在一个包含一组组件的页面上,并希望用一组不同的组件替换页面上的这组组件。如果这不是你想做的事,我会提前道歉。

您可以使用ViewStacks并在选择时切换选定的索引 - 这可以通过数据绑定或在controllers.AdminSession.logout()中触发事件并在主页面中侦听该事件并切换处理函数中视图堆栈的selectedIndex。

MainPage.mxml

<mx:ViewStack>
<views:Page1...>
    ...
    <comp:BackgroundButton x="947" y="12" width="61" height="22" 
          paddingLeft="2" paddingRight="2" label="logout" id="logout"
              click="controllers.AdminSession.logout()"/>
</views:Page1...>
<views:Page2 ...>
    ...
    <comp:Comp1 .../>
    <comp:Comp2 .../>
</views:Page2>