我有一个由自定义组件组成的页面。在那个页面我有一个按钮。如果我单击按钮,我必须调用另一个页面(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();
}
答案 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>