2010-08-24 52 views
0

我的应用程序需要一些窗口,但我不能使用popUpManager来处理自定义组件,所以我正在考虑实现一个新的窗口系统。flex 4:窗口系统开发思路

但我仍然不知道如何将它与我的自定义组件合并。有任何想法吗?

我的代码:

我登录的皮肤:

<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; 
     } 
    } 
} 

}`

现在我主要应用在一个窗口中加入这种成分。我希望能够在设计界面时看到窗口。这意味着窗口组件必须添加到组件中。不要使用它,而是要包含组件的所有内容。

+0

这是一个非常主观的问题。也许你应该量化你的新窗口系统需要具备哪些功能,以及为什么将它与自定义组件合并时遇到问题。 – JeffryHouser 2010-08-24 22:15:46

+0

,因为我无法使用titleWindow在as3 + mxml皮肤中制作我的组件。我有错误,我有另一个问题,我无法用答案解答:s。 (http://stackoverflow.com/questions/3535707/flex-4-title-window-custom-component-skin-problem) 功能可能是非常基本的,关闭,拖放和调整大小。然后添加最小化的可能性和包含最小化窗口的栏,就像在WIN XP或Vista中一样。当然不是图形,更轻。 – 2010-08-25 00:43:52

+0

Dear Totty,在你之前的问题中,你得到了答案,如果你真的需要更多的帮助,只需发布​​某处/这里的示例类,那么社区可以根据你的代码提供帮助。 :) 谢谢! – Eugene 2010-08-25 09:15:56

回答