как установить выбранного ребенка в viewstack? - PullRequest
1 голос
/ 03 декабря 2009

в main.mxml:

    public function init():void
    {
       PopUpManager.createPopUp(this,login,true);
    }
    <mx:ViewStack id="vs" label="content" >
      <local:FrontPanel id="Fpanel" />
      <local:SlavePanel id="Spanel" />
      <local:AdminPanel id="Mpanel" />  
    </mx:ViewStack> 

В Login.mxml:

public function authenticateRH(event:ResultEvent):void
    {
        var replyMsg:String=event.result as String;     

        switch(replyMsg)
        {
            case "Master" :
                here i want invoke Mpanel from Main.mxml
                break;

            case "Slave" :
                    here i want invoke Spanel from Main.mxml 
                break;

            case "fail" :
                Alert.show("Login Incorrect!!");
                return;
        }      
   }

Как мне выбрать ребенка из Viewstack main.mxml из login.mxml?

Ответы [ 4 ]

1 голос
/ 03 декабря 2009
public function init():void
{
   var popup:IFlexDisplayObject = PopUpManager.createPopUp(this, Login, true);
   popup.addEventListener(Event.SELECT, onSelect);
}
private function onSelect(e:CustomEvent):void
{
    if(e.item == CustomEvent.MASTER)
    {
        vs.selectedItem = Mpanel;
    }
    else if(e.item == CustomEvent.SLAVE)
    {
        vs.selectedItem = Spanel;
    }
    //remove popup
    PopUpManager.removePopUp(IFlexDisplayObject(e.target));
}

//Login.mxml :
public function authenticateRH(event:ResultEvent):void
{
    var replyMsg:String=event.result as String;             

    switch(replyMsg)
    {
            case "Master" :
                    dispatchEvent(new CustomEvent(CustomEvent.MASTER));
                    break;

            case "Slave" :
                    dispatchEvent(new CustomEvent(CustomEvent.MASTER));
                    break;
            case "fail" :
                    //remove popup
                    PopUpManager.removePopUp(this);
                    Alert.show("Login Incorrect!!");
                    return;
    }      
}
//CustomEvent.as
public class CustomEvent extends Event
{
    public static const MASTER:String = "master";
    public static const SLAVE:String = "slave";
    public var item:String;
    public function CustomEvent(item:String)
    {
        super(Event.SELECT);
        this.item = item;
    }
}
1 голос
/ 03 декабря 2009

Я бы использовал события (и интерфейсы), чтобы вашим формам не нужно было много знать об одном и другом. Это также дает вам больше контроля над тем, что происходит после закрытия вашего всплывающего окна (ИМХО).

Вот небольшой пример (если я смогу правильно вставить код). В этом примере не используется интерфейс, который поможет отделить вещи. Я также использую динамические события, которые ускоряют создание прототипов, но вы захотите определить формальное событие.

смоделируйте ваш основной:

        import mx.events.DynamicEvent;
    import mx.managers.PopUpManager;

    private function btnClick(e:Event):void
    {
        vs.selectedIndex = 0;

        var myLogin:myPopup = new myPopup();
        myLogin.addEventListener
                (
                    "WAS_CLOSED",
                    function(e:DynamicEvent):void { vs.selectedIndex = e.byButton; }
                );

        PopUpManager.addPopUp(myLogin, this, true);
        PopUpManager.centerPopUp(myLogin);
    }

смоделируйте ваш логин:

        import mx.events.DynamicEvent;
    import mx.managers.PopUpManager;

    private var eClose:DynamicEvent = new DynamicEvent("WAS_CLOSED");

    private function closeMe(byButton:int):void
    {
        eClose.byButton = byButton;
        dispatchEvent(eClose);
        PopUpManager.removePopUp(this);
    }

<mx:Button x="122" y="250" label="Thing 1" click="closeMe(1);" />
<mx:Button x="195" y="250" label="Thing 2" click="closeMe(2);" />
0 голосов
/ 03 декабря 2009

Во-первых, я считаю, что вы создаете свое всплывающее окно неправильно. у вас, кажется, переключены первые два параметра. должно быть:

PopUpManager.createPopUp(login,this,true);
документы: http://livedocs.adobe.com/flex/3/langref/mx/managers/PopUpManager.html#addPopUp%28%29

во-вторых, вам нужно либо явно указать классу Login ссылку на ваш класс Main, либо, если ваш класс Login находится в той же цепочке отображения, что и класс Main, вы можете использовать пользовательское событие с Bubbles, установленным на true . * +1009 *

0 голосов
/ 03 декабря 2009

Я предполагаю, что ваша проблема в том, что у вас нет ссылки на ваш ViewStack в вашем методе authenticateRH. Один из способов исправить это - дать вашему логину всплывающую информацию после его создания:

public function init():void
{
    var loginPopup:login = PopUpManager.createPopUp(this,login,true) as login;                                      
    loginPopup.setUsefulInformation(referenceToViewStack);
}

Вам нужно добавить метод setUsefulInformation () в login.mxml. От вас зависит, какую информацию вы хотите передать для решения проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...