0
你好在布賴恩的幫助下,我有這個alomost工作,但我錯過了一些不讓它工作100%的東西。Viewstack正在訪問
當我跟蹤這個我會得到一個-1的命令面板,即使我登錄使用任何用戶。 我希望如果用戶登錄,取決於他們的userRole viewstack去他們的視圖。
下面你會看到我有的代碼。 更多人可以幫忙請:(
<mx:ViewStack id="parentStack" width="1280" height="768">
<s:NavigatorContent id="loginVS" width="100%" height="100%" label="Login">
<forms:MainSiteForm id="mainForm" horizontalCenter="0" verticalCenter="0"/>
</s:NavigatorContent>
<s:NavigatorContent id="adminVS" width="100%" height="100%" label="Admin">
<s:ModuleLoader url="views/Administrator.swf"/>
</s:NavigatorContent>
<s:NavigatorContent id="salesVS" width="100%" height="100%" label="Sales">
</s:NavigatorContent>
<s:NavigatorContent id="designersVS" width="100%" height="100%" label="Designers">
</s:NavigatorContent>
<s:NavigatorContent id="retailersVS" width="100%" height="100%" label="Retailers">
</s:NavigatorContent>
</mx:ViewStack>
<fx:Script>
<![CDATA[
import mx.containers.ViewStack;
import mx.controls.Alert;
//import mx.core.Container;
import mx.core.FlexGlobals;
import mx.validators.Validator;
[Bindable]
private var validatorArr:Array;
private var loader:URLLoader;
private var externalXML:XML;
/**
* Initialization method
*/
public function init():void {
// Add validators to array for validating all at one time
validatorArr = new Array();
validatorArr.push(useridValidator);
validatorArr.push(passwordValidator);
}
/**
* User's information checking
* based on the inputted data
*/
public function loginCheck():void {
// Starting to validate
var errorArr:Array = Validator.validateAll(validatorArr)
// if the error array contain any data, => error
var isValid:Boolean = errorArr.length == 0;
if (isValid) {
// Load user data
doLogin();
}
}
private function doLogin():void {
// Point to the data file's path
var request:URLRequest = new URLRequest("data/Users.xml");
loader = new URLLoader();
try {
loader.load(request);
} catch (error:SecurityError) {
trace("A SecurityError has occurred.");
}
// If error, go to errorHandler function
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
// once the load action was complated, go to loaderCompleteHandler() for
// checking user information
loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
}
private function loaderCompleteHandler(event:Event):void {
var logged:Boolean = false;
try {
// Convert data into E4X class for easy access to elements
externalXML = new XML(loader.data);
// Loop through the user list to check
// if the inputted user id and password are valid
for each (var user:XML in externalXML.elements()) {
if (user.userID == userID.text && user.userPW == userPW.text) {
// user has an valid account
logged = true;
// Don't need to continue
break;
}
}
if (logged) {
// Redirect user function
var indexArr:Array = new Array("Login", "Admin", "Sales", "Designers", "Retailers");
var stackIndex:int = indexArr.indexOf(user.userRole);
FlexGlobals.topLevelApplication.parentStack.selectedIndex = stackIndex;
trace(stackIndex);
//Alert.show('Congratulation, you logged in!', 'Information');
} else {
Alert.show('User ID or Password is not correct, please try again!', 'Error');
}
} catch (e:TypeError) {
trace("Could not parse the XML file.");
}
}
private function errorHandler(e:IOErrorEvent):void {
Alert.show("Had problem loading the XML File.");
}
]]>
</fx:Script>
---------------------------------- ---------------- XML文件
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<userID>admin</userID>
<userPW>password</userPW>
<userRole>Admin</userRole>
</user>
<user>
<userID>sales</userID>
<userPW>password</userPW>
<userRole>Sales</userRole>
</user>
<user>
<userID>designer</userID>
<userPW>password</userPW>
<userRole>Designers</userRole>
</user>
<user>
<userID>buyer</userID>
<userPW>password</userPW>
<userRole>Retailers</userRole>
</user>
</users>
你好布萊恩...哇,這很好...我會明天嘗試這第一件事,讓你知道...我怎麼能改善你說的方式?我應該怎麼做才能完成:) – Alex
你好大腦,我剛剛測試了代碼,但它並沒有做任何事情:( – Alex
它停留在登錄視圖 – Alex