Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Flex3的ActionScript3.0中调用MXML类_Actionscript_Flex3_Mxml - Fatal编程技术网

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

如何在Flex3的ActionScript3.0中调用MXML类,actionscript,flex3,mxml,Actionscript,Flex3,Mxml,我有一个由自定义组件组成的页面。在那一页我有一个按钮。如果单击该按钮,我必须调用另一个页面(page.mxml,由自定义组件组成)。然后,单击事件处理程序将写入单独的文件中的操作脚本中 如何在ActionScript中创建MXML类的对象?如何显示对象(即页面) 我的代码: page1.mxml <comp:BackgroundButton x="947" y="12" width="61" height="22" paddingLeft="2" paddingRight="

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

如何在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中创建一个新状态,并将其命名为secondPageState,然后将自定义组件page2.mxml置于secondPageState中

在控制器中,您需要一个import语句来导入page1组件,并为page1组件创建一个公共变量,例如firstPage

然后,代码将类似于: 公用函数注销():voild { firstPage.currentState=“secondPageState”; }

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

您的Actionscript类需要对显示列表的引用,以便将组件添加到后台。MXML只是一个声明性的actionscript,所以在actionscript中创建实例和使用MXML符号之间没有区别

你的职能:

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

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

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

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

var startPage:StartSplashPage = new StartSplashPage();
myReferenceToDisplayListObject.addChild( startPage );
Sprite和StartSplashPage都是DisplayObject的核心扩展


您在对另一个答案的评论中引用了MVC。在不知道您所实现的特定框架的情况下,或者在您试图执行此操作的上下文中为我们提供更多代码的情况下,很难给出更具体的答案。

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

您可以使用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>

...
...

我在ActionScript中有一个控制器类,它必须调用StartSplashPage.mxml。为了实现MVC模式,代码需要在ActionScript中实现。但您仍然可以使用ActionScript更改当前状态。由于StartSplashPage.mxml只是另一个视图,它不会破坏MVC模式。很抱歉,我可以为您提供解释,您可以使用类似如何添加到静态公共函数logout()的代码:void{var startPage:StartSplashPage=new StartSplashPage();}此外,StartSplashPage.mxml应该是一个自定义组件,而不是一个函数,我认为你不能使用新的StartSplashPage()。michael,你错了。MXML组件只是使用MXML标记以声明方式创建的Actionscript类。它们可以像任何其他类一样使用新的MyComponent()语法进行实例化。这可能对你有帮助。
var startPage:StartSplashPage = new StartSplashPage();
myReferenceToDisplayListObject.addChild( startPage );
<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>