2015-07-19 214 views
1

我正在鈦中構建iOS應用程序。第一個窗口是登錄頁面。當用戶輸入他們的用戶名和密碼時,這些值將被髮送到一個PHP文件進行驗證。鈦關閉窗口並打開新窗口

如果用戶已通過身份驗證 - 即他們具有唯一的用戶名/密碼組合,我希望當前窗口關閉並打開新窗口。

將值發送到PHP文件並且用戶正在進行身份驗證;但是,當關閉當前窗口的代碼運行(Titanium.UI.currentWindow.close)時,會引發錯誤,指示打開新窗口的文件不存在。雖然引用新窗口的文件確實存在。

我已經將看起來會導致錯誤的代碼移到很多地方,但結果相同。

var loginReq = Titanium.Network.createHTTPClient(); 

loginReq.onload = function() 
{ 
    var json = this.responseText; 
    var response = JSON.parse(json); 
    if (response.logged == true) 
    { 
     alert("Welcome " + response.name + ". Your email is: " + response.email); 
     username.value = ''; 
     password.value = ''; 
     //This creates the new window after user authentication. 
     var menuPage = Titanium.UI.createWindow({ 
     title: "Menu", 
     tabBarHidden: false, 
     url: 'menuPage.js' 
     }); 
     //This is supposed to close the current window. 
     Titanium.UI.currentWindow.close(); 
     //This is supposed to open the new window. 
     menuPage.open(); 
    } 
    else 
    { 
     alert(response.message); 
    } 
}; 
+0

有時'Titanium.UI.currentWindow'不返回當前窗口。嘗試在網絡文件中傳遞'Window'或者在窗口中寫入網絡onload作爲回調。 – Swanand

回答

0

嗨試試這個打開的窗口

var menuPage = require('menuPage'); 
win = new menuPage({title:''}); 

感謝

2

而不是首先關閉窗口,然後打開新的,你應該先打開新的窗口,一旦打開,關閉舊窗口。

menuPage.open({closeWindow: function(){ 
    curWin.close(); } 
}); 

然後,在menuPage.js,觀看了該open事件,一旦被觸發,叫你傳遞給menuPage.js功能。

然而,我會建議潛入合金。這種方法是非常過時。如果您在使用合金

$.getView().addEventListener('open',args.closeWindow()); 
0

在合金你會做這樣的:

Alloy.createController('menuPage', {closeWindow: function(){ 
    $.getView().close(); 
}); 

在menupage

文件windowlogin.xml

<Alloy> 
 
\t <Window id="window_login"> 
 
\t \t <TextField id="txt_username"></TextField> 
 
\t \t <TextField id="txt_password"></TextField> 
 
\t \t <Button title="Login" id="btn_login"></Button> 
 
\t </Window> 
 
</Alloy>

文件windowlogin.js

$.btn_login.addEventListener("click", function(e){ 
 
\t var loginUrl = "http://domain.com/login"; 
 
\t var dataLogin = { 
 
\t \t username: $.txt_username.value, 
 
\t \t password: $.txt_password.value 
 
\t }; 
 
\t var loginReq = Titanium.Network.createHTTPClient(); 
 

 
\t loginReq.onload = function() 
 
\t { 
 
\t  var json = this.responseText; 
 
\t  var response = JSON.parse(json); 
 
\t  if (response.logged == true) 
 
\t  { 
 
\t   alert("Welcome " + response.name + ". Your email is: " + response.email); 
 
\t   username.value = ''; 
 
\t   password.value = ''; 
 
\t   //This creates the new window after user authentication. 
 
\t   var menuPage = Titanium.UI.createWindow({ 
 
\t \t \t title: "Menu", 
 
\t \t \t tabBarHidden: false, 
 
\t \t \t url: 'menuPage.js' 
 
\t \t \t }); 
 
\t \t \t //This is supposed to open the new window. 
 
\t   menuPage.open(); 
 
\t   //This is supposed to close the current window. 
 
\t   $.window_login.close(); 
 
\t  } 
 
\t  else 
 
\t  { 
 
\t   alert(response.message); 
 
\t  } 
 
\t }; 
 
\t 
 
\t loginReq.open("POST", loginUrl); 
 
\t loginReq.send(dataLogin); 
 
});