【发布时间】: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