0

我正在構建一個需要登錄屏幕的小應用程序。一旦用戶登錄一次,下一次他打開應用程序,他將已經登錄。鈦合金 - 決定在啓動時顯示哪個視圖

在app.js中的傳統鈦項目中,我用來檢查用戶是否已登錄,如果他打開主窗口,如果沒有 - 打開登錄窗口。但是這是我對app.js的控制權。

在Alloy項目中,我有index.js--它本身已經是一個窗口。我如何創建這樣的邏輯來打開正確的窗口?

UPDATE

所以,約48小時後合金高科技......我48小時聰明。

我遇到的最常見的答案是在索引控制器內部執行這個邏輯 - 這可能是項目管道中這種邏輯最合適的地方。但我一直認爲它確實有一些開銷,因爲我只初始化索引控制器來做一個簡單的邏輯,而不是初始化其他控制器。

由於Alloy項目首次編譯爲「Classic」Titanium代碼,查看代碼顯示初始化,並且每個這樣的控制器初始化都有自己的代碼作爲其控制器的一部分運行。

我沒有找到一個破解這個...不知道這是否是做的最好的事情,但它確實執行(就像在經典項目),按照之前的最低工作流程:

臨屋的應用程序/ alloy.js文件是我們可以添加全局函數和對象的地方。從Appcelerator文檔網站:

初始化文件app/alloy.js可用於在應用程序生命週期開始附近執行一些代碼。此文件的內容將在加載初始index.js控制器之前執行

實際上,該文件中的代碼編譯爲「classic」項目中的app.js。所以放置在那裏的任何代碼都將被放置在app.js中。

看看「編譯」app.js顯示執行的最終js行是索引控制器的初始化。所以乾脆把你的邏輯在該文件將確保它在app.js執行,並防止指數控制器的初始化,把此行作爲alloy.js最後一行:

if (false) 

這將確保索引初始化從不執行。

回答

0

這很簡單。你不應該在你的索引文件中定義的任何窗口:

,然後定義拖控制器(窗口)讓說登錄窗口&歡迎窗口。

//in index.js you can check if the user has logged in or not 
var wind=null; 
if(logged in) 
    wind=Alloy.createController('welcome').getView(); 
else 
    wind=Alloy.createController('login').getView(); 
wind.open(); 

和你有用戶登錄後應該打開歡迎窗口中...

+0

好像它是可能的解決辦法登錄窗口。看起來很奇怪,沒有辦法避免額外加載索引控制器。 – developer82 2014-09-20 19:23:24

+0

因爲索引是基於合金的應用程序的起點,所以我們無法避免索引控制器的加載...順便說一下,我正在使用appcelerator,我注意到Windows使您的應用程序更慢。我得出了一個結論,不要在這個窗口中的應用程序(索引窗口)中只使用一個窗口,我定義了一個視圖(rootView),然後我創建的所有其他控制器都以View標籤開始,並將它們加載到rootView文需要並刪除它們(刪除),當我完成他們。這個解決方案看起來像最好的一個...... – Coyote 2014-09-20 21:18:01

+0

我認爲有一個窗口,並將每個屏幕視爲一個視圖是一個錯誤。我諮詢了一家在Android設備上使用「輕量級」窗口得出類似結論的公司,並且在其邏輯和應用程序中造成了嚴重的錯誤。此外,它打破了不同設備的正常行爲(如iOS上的導航控制)。 – developer82 2014-09-21 06:55:06