flex 4: идеи разработки оконных систем - PullRequest
0 голосов
/ 25 августа 2010

Моему приложению понадобятся некоторые окна, но я не могу использовать popUpManager для обработки пользовательских компонентов, поэтому я думаю реализовать новую систему окон.

Но я до сих пор не знаю, как объединить его с моими пользовательскими компонентами. Есть идеи?

Мой код:

Мой логин скина:

<s:Skin(...)>
   <s:Group>
      (...login components...)
   </s:Group>
</s:Skin>


package com.totty.app.components.login {
import com.totty.app.TottysBrain;
import com.totty.app.components.window.Window;
import com.totty.app.events.LoginSuccessEvent;
import com.totty.tottysBrain.components.BrainyDynComponent;
import com.totty.tottysBrain.components.BrainyWindow;

import flash.events.Event;
import flash.events.MouseEvent;

import mx.controls.Alert;
import mx.managers.PopUpManager;

import spark.components.Button;
import spark.components.CheckBox;
import spark.components.Group;
import spark.components.Label;
import spark.components.TextInput;
import spark.components.supportClasses.SkinnableComponent;

[Event(name="loginSuccess", type="com.totty.app.events.LoginSuccessEvent")]
public class Login extends BrainyDynComponent {
    [SkinPart(required="true")]
    public var email:TextInput;

    [SkinPart(required="true")]
    public var password:TextInput = new TextInput();

    [SkinPart(required="false")]
    public var rememberMe:CheckBox;

    [SkinPart(required="false")]
    public var notification:Label;

    [SkinPart(required="true")]
    public var submit:Button = new Button();

    private var _currentState:uint = 0;
    private var _states:Array = ['default', 'logging', 'loginFailure', 'loginSuccess'];

    private var _default:Boolean = false;
    private var _logging:Boolean = false;
    private var _loggingSuccess:Boolean = false;
    private var _loggingFailure:Boolean = false;

    public function Login() {
        super();

        defaultCommand = 'users.login';
        defaultSkin = LoginSkin;

        _setCurrentState(0);

        onPartAdded('submit', function():void {
                submit.addEventListener(MouseEvent.CLICK, _submitLoginButton_click);
        });

        onPartRemoved('submit', function():void {
                submit.removeEventListener(MouseEvent.CLICK, _submitLoginButton_click);
        });

        onPartAdded('window', function():void{
            //window.addEventListener('close', _window_close);
            //window.title = 'Login';
        });
    }

    private function _window_close(evt:Event):void{
        dispatchEvent(evt);

        var parentAsGroup:Group = parent as Group
        parentAsGroup.removeElement(this);
    }

    protected function _submitLogin():void {
        _setCurrentState(1);
        submitData({email:email.text, password:password.text, rememberMe:rememberMe.selected});
    }

    override protected function _onSuccess(result:*):void {
        Alert.show(result);
        _setCurrentState(3);
        if(result) {
            dispatchEvent(new LoginSuccessEvent(email.text, rememberMe.selected));
            _loggingSuccess = true;
        }else{
            _setCurrentState(4);
            _loggingSuccess = false;
        }
    }

    override protected function _onFailure(result:*):void {
        Alert.show(result);
        _setCurrentState(4);
        _loggingSuccess = false;
    }

    private function _submitLoginButton_click(evt:MouseEvent):void {
        _submitLogin();
    }

    private function _setCurrentState(n:uint):void{
        if(_currentState == n) return;

        _currentState = n;
        invalidateProperties();
    }

    override protected function commitProperties():void{
        super.commitProperties();




        switch(_currentState){
            case 0:
                // default
                //window.footerText = '';
            break;
            case 1:
                // logging
                //window.footerText = 'logging';
            break;
            case 2:
                // loginFailure
                //window.footerText = 'loginFailure';
            break;
            case 3:
                // loginSuccess
                //window.footerText = 'loginSuccess';
                //parentBrain.removeElement(this);
                //var parentAsGroup:Group = parent as Group
                //PopUpManager.removePopUp(this);
                //parentAsGroup.removeElement(this);
            break;
        }
    }
}

} `

Теперь у меня есть основное приложение для добавления этого компонента в окно. Я предпочел бы иметь возможность видеть окно во время разработки интерфейса. Это означает, что компонент окна должен быть добавлен к компоненту. Не использовать, но что-то вроде содержания всего компонента.

1 Ответ

0 голосов
/ 25 августа 2010

Может быть, вы уже видели это, но в любом случае это хорошее место для начала:)

http://code.google.com/p/flexmdi/

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