2012-11-09 70 views
1

我使用jQuery Mobile的1.2,我試圖寫一些代碼來處理所有頁面初始化取消pageinit事件。jQuery Mobile的 - 這取決於條件

例如,讓我們說,我需要檢查,如果一個用戶第一次登錄到該應用程序在做每個頁面某些操作。如果用戶沒有登錄,我應該重定向到另一個頁面,例如登錄。

實施例,下面的代碼應該每一頁初始化之前被執行:

$(document).live('pagebeforecreate', function(event) { 
if (ifUserIsNOTLoggedIn()) { 
    $.mobile.changePage("login.html"); 
    event.preventDefault(); 
}}); 

網頁A:

$('#a').live('pageinit', function() { 
// Do things }); 

網頁B:

$('#b').live('pageinit', function() { 
// Do things }); 

的pagebeforecreate代碼之前應該運行pageinit(默認情況下會正確觸發),但也應取消頁面轉換到A或B並且pageinit不應被觸發。

能否請你幫我,我怎麼可以取消從「pagebeforecreate」部分pageinit事件?

回答

1

只是我的兩分錢,但頁面重定向是應該在服務器端進行,如果可能的話,e.g:如果你爲一個頁面的請求時,服務器代碼將驗證您是否進行身份驗證。如果你是,它會返回你要求的頁面,否則會返回登錄頁面。

如果因任何原因,你所要做的一切客戶端,你應該檢查,如果用戶在之前不斷變化的網頁記錄。如果pagebeforecreate被解僱,那麼被創建,現在想改變自己的想法已經太遲了(可能)。

jQM docs

注意,通過結合pagebeforecreate,你可以前jQuery Mobile的默認控件操縱標記 是自動初始化。對於 示例,假設您想要通過JavaScript代替 在JavaScript中添加數據屬性,則這是您要使用的事件。

對我來說這就像pagebeforecreate的事件處理程序僅用於修改即將顯示的頁面。看起來更好的事件用於完成您正在做的事情是pagebeforechange事件:

此事件在任何頁面加載或轉換之前觸發。 回調可以阻止執行changePage()函數 調用傳遞給回調的事件對象上的preventDefault。 (...)應該指出的是,回調可以同時修改toPage和 選項屬性來改變目前的changePage()調用 的行爲。因此,例如,可以在回調中將toPage映射到 以實現某種重定向。

+0

我沒有使用服務器端重定向的原因是我試圖使用上述技術爲我的所有頁面應用通用規則。登錄只是大家熟悉的一個例子。換句話說,我想在JavaScript中實現某種...方面。有一個共同的邏輯,我想與所有應該取消頁面轉換的頁面共享,以防某些規則被觸發 – mspapant