Передача параметра из flex main в компонент flex (4) с привязкой данных - PullRequest
0 голосов
/ 22 августа 2010

У меня есть основной файл mxml (flex4), и я хочу передать параметр (имя_пользователя) компоненту в каталоге с именем компонентов.

Когда я запускаю программу, имя_пользователя НЕ отправляется из основного в файл компонента. (Интересно, что если вы сделаете компонент видимым, вы увидите, что параметр передан)

Новое в flex / actionscript, и передача этих параметров (без посторонней помощи) - довольно трудная задача для прогресса.

Итак, помощь будет очень признательна.

ТИА.

Я взломал файлы большего размера, чтобы получить следующие два файла:

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 Ответ

1 голос
/ 24 августа 2010

Если вы просто хотите получить имя пользователя из основного приложения в свой компонент TitleWindow, просто установите win3.user_name = имя_пользователя после создания экземпляра win3.Если вы хотите связать его с недавно созданным экземпляром win3 (что вы и сделали бы, если бы ожидали изменения user_name), вам нужно обратиться к вспомогательному классу BindUtils.

Типичный способ вернуть данные иМежду приложением и диалоговым окном следует установить значение после создания экземпляра диалогового окна, а затем добавить прослушиватель в диалоговое окно, чтобы приложение получало уведомление, если что-то изменилось.Например, если вы слушаете событие Close, вы можете получить значение из этого события следующим образом: (event.currentTarget as EditAccountForm) .user_name в обработчике событий вашего приложения.

Другой распространенный метод - заставить ваше окно отправлять пользовательское событие (для которого ваше главное приложение добавило прослушиватель в диалог), которое содержит новое значение для user_name.

Надеюсь, что поможет.1007 *

...