我的應用程序需要一些窗口,但我不能使用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;
}
}
}
}`
現在我主要應用在一個窗口中加入這種成分。我希望能夠在設計界面時看到窗口。這意味着窗口組件必須添加到組件中。不要使用它,而是要包含組件的所有內容。
這是一個非常主觀的問題。也許你應該量化你的新窗口系統需要具備哪些功能,以及爲什麼將它與自定義組件合併時遇到問題。 – JeffryHouser 2010-08-24 22:15:46
,因爲我無法使用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
Dear Totty,在你之前的問題中,你得到了答案,如果你真的需要更多的幫助,只需發佈某處/這裏的示例類,那麼社區可以根據你的代碼提供幫助。 :) 謝謝! – Eugene 2010-08-25 09:15:56