2010-08-24 44 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

回答