2013-05-22 55 views
0

我有一個單頁JQM應用程序 - 所有JQM「頁面」是一個文件:如何在SPA中禁用默認的JQM頁面?

<div> 
     @RenderPage("Views/login.cshtml") 
     @RenderPage("Views/page1.cshtml") 
     @RenderPage("Views/page2.cshtml") 
    </div> 

如何禁用顯示在默認情況下,目前正好是一個login.cshtml JQM頁面,所以我可以在用戶登錄後手動調用轉換方法從歷史中刪除登錄頁面?公式這就是我想手動調用初始文件負載:

$.mobile.changePage('#login-page', { reverse: false, changeHash: true }); 

或者,是不是可以設置「反向」屬性設置爲false沒有changePage電話嗎?

+0

您的應用程序邏輯是錯的...你不應該在所有用戶是否登錄渲染登錄頁面,你在技術上不應該渲染其他頁面,如果他們沒有登錄! – ahren

+0

@ahren這是單頁面應用程序的演示文稿部分。無論如何,他們都無法訪問任何Web服務調用,所以我沒有看到這裏的問題是什麼。而且,一次只有一個頁面從JQM呈現給用戶。應用程序的其他邏輯與這個問題沒有任何關係。 – Dante

+0

如果我正確地理解了你,你想決定將要顯示哪個頁面?如果用戶尚未登錄,登錄頁面或用戶已登錄的頁面1? – Gajotres

回答

1

如果你想我可以給你一個客戶端解決方案。

基本上你一個使用我的大例子:http://jsfiddle.net/Gajotres/3PhKZ/防止頁面轉換,如果某些條件沒有被滿足。此時,您可以使用changePage功能在其他任何頁面上轉發該用戶。

該解決方案將在任何情況下工作,因爲它會在每一頁轉換過程中觸發,如果下一個頁面是在您的情況登錄頁面會看情況,做任何你想要的。您可以允許過渡,防止它完全或只是重定向到另一頁:

$(document).on('pagebeforechange', function(e, data){ 
    var to = data.toPage, 
     from = data.options.fromPage; 

    if (typeof to === 'string') { 
     var u = $.mobile.path.parseUrl(to); 
     to = u.hash || '#' + u.pathname.substring(1); 
     if (from) from = '#' + from.attr('id'); 

     if (from === '#index' && to === '#second') { 
      alert('Can not transition from #index to #second!'); 
      e.preventDefault(); 
      e.stopPropagation(); 

      // remove active status on a button, if transition was triggered with a button 
      $.mobile.activePage.find('.ui-btn-active').removeClass('ui-btn-active ui-focus ui-btn');; 
     } 
    } 
}); 
+0

我還沒有來得及測試,但沒有這種完全停止導航?例如:用戶導航從stackoverflow.com - > login.cshtml - > page1.cshtml,*按下後退按鈕「,但無法返回到stackoverflow.com並卡在page1.cshtml。 – Dante

+0

正如我在我的回答中告訴你的這會阻止頁面轉換,但不會跳過這個頁面,這只是你可以做的一個解決方案。 – Gajotres