Apache flex 如何在Flex中将一组值从一个mxml组件传递到另一个组件?
我有一个带有datagrid的mxml组件,其中列出了项目名称和代码版本。我已将datagrid中选定的项目绑定到名为“selectedProjects”的公共变量。但是如何在另一个mxml组件中访问此变量。我希望所选项目的名称位于该组件的文本区域中。怎么做? 我甚至创建了第一个组件的一个实例,并使用该实例调用selectedProjects变量。但是我没有在文本区域中更新值 这是我在变量中获取所选项目名称的第一个组件的代码:Apache flex 如何在Flex中将一组值从一个mxml组件传递到另一个组件?,apache-flex,datagrid,Apache Flex,Datagrid,我有一个带有datagrid的mxml组件,其中列出了项目名称和代码版本。我已将datagrid中选定的项目绑定到名为“selectedProjects”的公共变量。但是如何在另一个mxml组件中访问此变量。我希望所选项目的名称位于该组件的文本区域中。怎么做? 我甚至创建了第一个组件的一个实例,并使用该实例调用selectedProjects变量。但是我没有在文本区域中更新值 这是我在变量中获取所选项目名称的第一个组件的代码: <?xml version="1.0" encoding="u
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="handleCreationComplete();"
width="800" height="600">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
import mx.collections.ArrayCollection;
import mx.events.ItemClickEvent;
[Bindable] public var selectedProjects:Array;
private function handleCreationComplete():void {
PopUpManager.centerPopUp(this);
}
public var pages:ArrayCollection=new ArrayCollection([
{label:"10"},
{label:"20"},]);
public var projectList:ArrayCollection=new ArrayCollection([
{ItemName:"User Requirement Specification",ItemCodeVersion:"URS - 1"},
{ItemName:"User Requirement Specification",ItemCodeVersion:"URS - 2"},
{ItemName:"Software Requirement Specification",ItemCodeVersion:"SRS - 2.1"},
{ItemName:"Software Design Specification",ItemCodeVersion:"SDS - 2"},
{ItemName:"Software Design Specification",ItemCodeVersion:"SRS - 1.1"},
{ItemName:"User Manual",ItemCodeVersion:"User Manual - 1"},
{ItemName:"User Manual",ItemCodeVersion:"User Manual - 2.1"},]);
private function close():void
{
PopUpManager.removePopUp(this);
}
private function select():void
{
Alert.show(projectListDG.selectedItem.ItemName);
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:Binding source="projectListDG.selectedItems" destination="selectedProjects" />
<mx:Label styleName="labelHeading" text="Project Documents List"/>
<mx:Panel width="100%" height="100%" layout="vertical" title="Documents List" >
<mx:HBox>
<mx:Label text="Show"/>
<mx:ComboBox dataProvider="{pages}" width="60" />
<mx:Label text="results per page" />
</mx:HBox>
<mx:DataGrid id="projectListDG" dataProvider="{projectList}" allowMultipleSelection="true" rowCount="10" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="Select" itemRenderer="mx.controls.CheckBox" textAlign="center" width="50"/>
<mx:DataGridColumn headerText="Item Name" dataField="ItemName" textAlign="center" />
<mx:DataGridColumn headerText="Item Code - Version" dataField="ItemCodeVersion" textAlign="center" width="150 " />
</mx:columns>
</mx:DataGrid>
<mx:Label text="{projectListDG.selectedItem.ItemName}"/>
</mx:Panel>
<mx:HBox horizontalAlign="center" width="100%">
<mx:Button label="Select" click="select();"/>
<mx:Button label="Cancel" click="close();"/>
</mx:HBox>
</mx:TitleWindow>
我现在在selectedProjects变量中有了选定的项目
现在这是我试图使用项目名称的第二个组件
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IFlexDisplayObject;
import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
[Bindable]
public var projectList:projDocsLookUp=new projDocsLookUp();
//Datagrid
[Bindable]
private var defectDetails:ArrayCollection = new ArrayCollection([
{Select:true},
]);
private function projDocsPopUp():void{
var helpWindow:TitleWindow = TitleWindow(PopUpManager.createPopUp(this, projDocsLookUp, true));
helpWindow.title="Project Documents List";
}
]]>
</mx:Script>
<mx:Label styleName="labelHeading" text="Defect Entry - Verification" />
<mx:Panel width="100%" height="30%" layout="vertical" title="Review Report Details">
<mx:VBox width="100%">
<mx:FormItem label="Project Name:" width="100%">
<mx:Text text="IPMS"/>
</mx:FormItem>
<mx:HRule width="100%"/>
<mx:VBox>
<mx:FormItem label="Project Documents:">
<mx:HBox>
<!--text="{projectList.projectListDG.selectedItem.ItemName}"-->
<mx:TextArea id="projDocs" width="150" text="{projectList.selectedProjects}" />//text area field is not updated.
<mx:Button width="30" label=".." click="projDocsPopUp();"/>
</mx:HBox>
</mx:FormItem>
</mx:VBox>
</mx:Panel>
<mx:Panel width="100%" height="50%" layout="vertical" title="Defect Details" >
<mx:DataGrid id="defectDG" dataProvider="{defectDetails}" variableRowHeight="true" width="100%" height="75" >
<mx:columns>
<mx:DataGridColumn dataField="Select" itemRenderer="mx.controls.CheckBox" width="50" textAlign="center" />
<mx:DataGridColumn dataField="Defect Id" itemRenderer="mx.controls.TextInput" textAlign="center"/>
<mx:DataGridColumn dataField="Status" itemRenderer="mx.controls.ComboBox" textAlign="center"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:VBox>
//文本区域字段未更新。
我试图更新Id为“projDocs”的文本区域中所选项目的值,但我没有得到它。。请找个人来帮我好吧我自己找到了解决办法 当然是谷歌搜索。我遵循了本文给出的方法 我添加了对父应用程序TextArea控件的引用。弹出组件使用该引用更新第一个组件的文本区域 在第一个组件中,我将创建弹出窗口的函数更改为
private function projDocsPopUp():void{
var helpWindow:projDocsLookUp = projDocsLookUp(PopUpManager.createPopUp(this, projDocsLookUp, true));
helpWindow.title="Project Documents List";
helpWindow.showCloseButton=true;
helpWindow.targetComponent=projDocs; //I get the value returned by the pop up window here
然后在弹出组件中,将选择功能更改为:
private function select():void
{
var i:int;
for(i=0;i<selectedProjects.length;i++)
{
targetComponent.text+=selectedProjects[i].ItemName+",";
}
PopUpManager.removePopUp(this);
}
private function select():void
{
变量i:int;
因为(i=0;i我自己找到了答案
当然是谷歌搜索。我遵循了本文给出的方法
我添加了对父应用程序TextArea控件的引用。弹出组件使用该引用更新第一个组件的TextArea
在第一个组件中,我将创建弹出窗口的函数更改为
private function projDocsPopUp():void{
var helpWindow:projDocsLookUp = projDocsLookUp(PopUpManager.createPopUp(this, projDocsLookUp, true));
helpWindow.title="Project Documents List";
helpWindow.showCloseButton=true;
helpWindow.targetComponent=projDocs; //I get the value returned by the pop up window here
然后在弹出组件中,将选择功能更改为:
private function select():void
{
var i:int;
for(i=0;i<selectedProjects.length;i++)
{
targetComponent.text+=selectedProjects[i].ItemName+",";
}
PopUpManager.removePopUp(this);
}
private function select():void
{
变量i:int;
对于(i=0;i在选择项目后,标题窗口不关闭(在select()方法中)?这是否意味着所选的项目名称不再可用,因此您无法在其他类中读取它?哦..我对flex不熟悉,只是像在项目中一样学习它。那么如何传递变量?即使在关闭窗口后也没有任何方法传递数据吗?我会将方法名称传递给projDocsLookup类on创建(方法名称将是VBox类中的现有方法,其唯一目的是接收标题)。然后,当用户关闭对话框时,使用回调函数传递标题。不幸的是,我对Flex的了解不够,无法向您演示如何执行此操作。请在您喜爱的搜索引擎上查找与传递变量相关的回调函数和事件。祝您好运!可能值得您研究MVC体系结构-Cairngorm,PureMVC等。我开始时没有MVC,一旦我发现了它,它就为我节省了很多时间。实际上,我回去重构了整个应用程序以使用Cairngorm-这是完全值得的。祝你好运!你的标题窗口不是在项目被选中后关闭了吗(在你的select()方法中)?这是否意味着所选的项目名称不再可用,因此您无法在其他类中读取它?哦..我对flex不熟悉,只是像在项目中一样学习它。那么如何传递变量?即使在关闭窗口后也没有任何方法传递数据吗?我会将方法名称传递给projDocsLookup类on创建(方法名称将是VBox类中的现有方法,其唯一目的是接收标题)。然后,当用户关闭对话框时,使用回调函数传递标题。不幸的是,我对Flex的了解不够,无法向您演示如何执行此操作。请在您喜爱的搜索引擎上查找与传递变量相关的回调函数和事件。祝您好运!可能值得您研究MVC体系结构-Cairngorm,PureMVC等。我开始时没有MVC,一旦我发现了它,它就为我节省了很多时间。实际上我回去重构了整个应用程序以使用Cairngorm-这完全值得。祝你好运!