如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件

Posted

技术标签:

【中文标题】如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件【英文标题】:How to call a mxml component from another mxml component in flex-edited 【发布时间】:2010-12-08 15:45:12 【问题描述】:

我需要通过单击另一个名为“reviewComponent.mxml”的 mxml 组件中的链接来调用名为“defectTracker.mxml”的组件。我如何做到这一点?

这是我的 reviewComponent.mxml 代码:

 <?xml version="1.0" encoding="utf-8"?> 
 <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
            
          horizontalScrollPolicy="off" verticalScrollPolicy="off">

 <mx:Script>
    <![CDATA[


         private function defectTrackerLink(event:Event):void
                 //call defectTracker
        
    ]]>
 </mx:Script>

 <mx:LinkButton label="Delete" textDecoration="underline" textRollOverColor="blue"/>
 <mx:LinkButton label="Defect Tracker" textDecoration="underline" textRollOverColor="blue" click="defectTrackerLink(event)"/>

 </mx:VBox>

有人指导我。

Main.mxml:

<mx:Script>
<![CDATA[
  private function subBtnBar(evt:ItemClickEvent):void
switch (evt.label)
    case "IQA/UAT":
        this.bdyStack.selectedChild = screenIQA;
        break;
    case "EQA":
        Alert.show("Yet To Design");
        break;
    case "Review Tracker":
        this.bdyStack.selectedChild = reviewTracker;
        break;
    case "Defect Tracker":
        this.bdyStack.selectedChild = defectTracker;
        break;                              
    default:
        trace ("Neither a or b was selected")
     

   ]]>
</mx:Script>
 <mx:ViewStack id="tabView"  creationPolicy="all">
   <mx:ToggleButtonBar horizontalGap="0" id="subTabBar"
      itemClick="subBtnBar(event);" styleName="SubButtonBar"
      hideEffect="dissolveOut" showEffect="dissolveIn">

     <mx:dataProvider>
     <mx:String>IQA/UAT</mx:String>
     <mx:String>EQA</mx:String>
     <mx:String>Review Tracker</mx:String>
     <mx:String>Defect Tracker</mx:String>
     <mx:String>Defect Configuration</mx:String>
     <mx:String>Defect Export</mx:String>
     <mx:String>Defect Import</mx:String>
</mx:dataProvider>
    </mx:ToggleButtonBar>   
  </mx:ViewStack>

  <mx:ViewStack id="bdyStack"  >     
        <components:ScrIQA id="screenIQA"
            hideEffect="dissolveOut" showEffect="dissolveIn"/>
        <components:scrWorkList id="screenWorkList"
            hideEffect="dissolveOut" showEffect="dissolveIn"/>  
        <components:DefectEntryVerification id="defectEntryVerification" 
            hideEffect="dissolveOut" showEffect="dissolveIn"
             />
        <components:scrDefectResolutionAndCause id="defectResolutionnVerification"
            hideEffect="dissolveOut" showEffect="dissolveIn"
             />
        <components:reviewTracker id="reviewTracker" 
            hideEffect="dissolveOut" showEffect="dissolveIn"
             />
        <components:defectTracker id="defectTracker"
            hideEffect="dissolveOut" showEffect="dissolveIn"
             />
   </mx:ViewStack>   

缺陷跟踪器屏幕已与主 mxml 文件链接。如何调用reviewComponent文件中的函数? reviewComponent 由 2 个链接按钮组成,它是 reviewTracker.mxml 文件数据网格的列条目。因此,当我单击评论组件中的链接时,我希望调用 defectTracker 屏幕。它已经是 main.mxml 文件的子文件了。

我尝试在组件中创建一个主文件的实例,并将选定的子文件更改为缺陷跟踪器,它显示错误提示:

Error #1009: Cannot access a property or method of a null object reference.

我修改的reviewComponent.mxml代码:

 <?xml version="1.0" encoding="utf-8"?> 
 <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
            
          horizontalScrollPolicy="off" verticalScrollPolicy="off">

 <mx:Script>
    <![CDATA[


         private function defectTrackerLink(event:Event):void
                 var main:Main=new Main();
                 main.bdyStack.selectedChild=main.defectTracker;            
    ]]>
 </mx:Script>

 <mx:LinkButton label="Delete" textDecoration="underline" textRollOverColor="blue"/>
 <mx:LinkButton label="Defect Tracker" textDecoration="underline" textRollOverColor="blue" click="defectTrackerLink(event)"/>

 </mx:VBox>

请有人指导我吗?我应该调用切换按钮栏的项目单击事件函数吗?如果可以怎么办?

【问题讨论】:

【参考方案1】:

我会使用一个自定义的冒泡事件。您将从 reviewComponent 中分派它,它会被缺陷跟踪器捕获。

这里有一些很好的文章,告诉你如何创建自定义事件以及如何使用它http://livedocs.adobe.com/flex/3/html/help.html?content=createevents_3.html http://www.connatserdev.com/blog/?p=86

【讨论】:

您能否对此进行更多解释,如果可能的话,举个例子。由于我是 Flex 新手,所以我不知道大部分概念。 添加了自定义活动文章的链接。这可能比我发布一个例子更好【参考方案2】:

调用是指将其添加到 VBox 中吗?

var dTracker:DefectTracker = new DefectTracker();
addChild(dTracker);

【讨论】:

不,应该打开那个 mxml 屏幕。这两个组件已经是 main.mxml 的一部分,它是主应用程序。请参考我的编辑,我已经更新了我的 main.mxml 文件的一部分【参考方案3】:

是否可以通过弹出窗口调用?

 var dTracker:DefectTracker = new DefectTracker();
 PopUpManager.addPopUp(dTracker, this, true);

【讨论】:

不,它不是弹出窗口。它已经是 main.mxml 屏幕的子组件。如果我单击主文件中的“缺陷跟踪器”选项卡,我会显示屏幕。如何通过单击“reviewComponent”文件中的链接来显示此屏幕?

以上是关于如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中从另一个屏幕进行更改

如何在 Reactjs 中从另一个组件触发状态

如何在 React 中从另一个组件设置一个组件的状态

如何在 Java 中从另一个构造函数调用一个构造函数?

如何在swiftUI的父视图中从另一个视图访问变量?

如何在 Android 中从另一个应用程序启动 Activity