使用数据绑定将参数从flex main传递到flex(4)组件

时间:2010-08-22 08:58:59

标签: flex data-binding actionscript flex4

我有一个主mxml文件(flex4),并希望将参数(user_name)传递给名为components的目录中的组件。

当我运行程序时,不会将user_name从主文件发送到组件文件。 (有趣的是,如果你使组件可见,你可以看到参数已经通过了)

新的flex / actionscript和这个参数传递是(没有帮助)进展非常痛苦。

所以,非常感谢帮助。

TIA。

我已经攻击了更大的文件以获取以下两个文件:

MAIN

<?xml version="1.0" encoding="utf-8"?>
<s:Application             
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           xmlns:fx="http://ns.adobe.com/mxml/2009"                
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:components="components.*">

 <mx:Button  id="editAccount" label="Edit Account"  fontSize="16" color="#000000" x="100" y="125" click="AccountForm(event)" />

 <components:editAccountForm visible="false"  user_name = "username from main" /> 

<fx:Script>
    <![CDATA[
        import components.editAccountForm;
        import mx.managers.PopUpManager;

        private function AccountForm(e:MouseEvent):void
        {
          var win3:editAccountForm = new editAccountForm();
          PopUpManager.addPopUp(win3,this,true);
          PopUpManager.centerPopUp(win3);   
        }       
    ]]>
</fx:Script>
</s:Application>

组件文件

<?xml version="1.0" encoding="utf-8"?>

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" 
            layout="vertical" title="Edit Account Details" x="50" y="600" >


<mx:Form width="100%" height="100%">
    <mx:FormItem label="">
        <mx:Label width="300" textAlign="center" text="{user_name}"/>
    </mx:FormItem>
    <mx:FormItem label="Enter your new Email Address">
        <mx:TextInput id="email_address2" width="300" maxChars="128" contentBackgroundColor="#F5DC0C"/>
    </mx:FormItem>
</mx:Form>
<mx:HBox width="100%" horizontalAlign="center">
  <mx:Button id="close" label="Close" click="PopUpManager.removePopUp(this)" />
</mx:HBox>


<mx:Script>
    <![CDATA[
      [Bindable] 
      public var user_name:String = "username from Component";      
    ]]>
</mx:Script>


<mx:Script>
    <![CDATA[
        import mx.core.IFlexDisplayObject;
        import mx.events.CloseEvent;
        import mx.managers.PopUpManager;

        private function closeWindow(e:CloseEvent):void 
        {
          PopUpManager.removePopUp(e.target as IFlexDisplayObject);
        }
    ]]>
</mx:Script>


</mx:TitleWindow>

1 个答案:

答案 0 :(得分:1)

如果您只想将主应用程序中的user_name导入TitleWindow组件,请在实例化win3后设置win3.user_name = user_name。如果您希望将它绑定到新实例化的win3(如果期望更改user_name,则会执行此操作),那么您需要查看BindUtils帮助程序类。

在应用程序和对话框之间来回传递数据的典型方法是在实例化对话框后设置值,然后在对话框中添加一个侦听器,以便在更改内容时通知您的应用程序。例如,如果您正在侦听Close事件,则可以在应用程序的事件处理程序中从事件中获取值:(event.currentTarget as EditAccountForm).user_name。

另一种常见方法是让您的窗口调度一个自定义事件(主应用程序为对话框添加了一个监听器),其中包含user_name的新值。

希望有所帮助。