【问题标题】:flex 4: window system development ideasflex 4:窗口系统开发思路
【发布时间】:2010-08-24 22:11:45
【问题描述】:

我的应用程序需要一些窗口,但我不能使用 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;
        }
    }
}

}`

现在我有了在窗口中添加这个组件的主应用程序。我希望在设计界面时能够看到窗口。这意味着必须将窗口组件添加到组件中。不使用,而是像包含组件的所有内容。

【问题讨论】:

  • 这是一个非常主观的问题。也许您应该量化您的新窗口系统需要具备哪些功能,以及为什么无法将其与自定义组件合并。
  • 因为我不能将我在 as3 + mxml 皮肤中制作的组件与 titleWindow 一起使用。我有错误,我有另一个问题,我无法用答案解决它:s。 (stackoverflow.com/questions/3535707/…) 功能可以是非常基本的、关闭、拖放和调整大小。然后可以添加最小化和一个包含最小化窗口的栏,就像在 WIN XP 或 vista 中一样。当然不是那个图形,更轻。
  • 亲爱的 Totty,在您之前的问题中,您得到了答案,恕我直言,这是真正的答案,如果您真的需要更多帮助,只需在某处/此处发布示例类,以便社区可以根据您的代码提供帮助。 :) 谢谢!
  • 我已经编辑了我的原始问题并添加了源代码。 mxml不能写所以很基础..
  • 这是什么 BrainyDynComponent ?你能把它从 MDIWindow 扩展吗?还是作为界面工作?

标签: actionscript-3 flex4


【解决方案1】:

也许你已经看到了,但无论如何,这是一个很好的起点:)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多