【问题标题】:How to disable the default JQM page in a SPA?如何禁用 SPA 中的默认 JQM 页面?
【发布时间】:2013-05-22 02:28:00
【问题描述】:

我有一个单页 JQM 应用程序 - 所有 JQM“页面”都在一个文档中:

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

如何在默认情况下禁用显示 JQM 页面,当前恰好是 login.cshtml,这样我可以在用户登录后手动调用转换方法从历史记录中删除登录页面?这就是我想在初始文档加载时手动调用的内容:

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

或者,是否可以在不调用changePage 的情况下将“reverse”属性设置为 false?

【问题讨论】:

  • 您的应用程序逻辑错误...如果用户已登录,您根本不应该渲染登录页面。如果其他页面没有,您从技术上讲不应该渲染其他页面登录!
  • @ahren 这是单页应用程序的演示部分。他们无论如何都无法在没有身份验证的情况下访问任何 Web 服务调用,所以我看不出这里有什么问题。此外,一次只从 JQM 向用户呈现一页。应用程序的其余逻辑与问题无关。
  • 如果我理解正确,您想决定要显示哪个页面?如果用户未登录,则登录页面或用户已登录的页面1?
  • @Gajotres 我目前可以控制页面的显示方式,但我似乎无法找到从导航历史记录中删除登录页面的方法 - 所以当用户登录时,或者登录并被重定向,他们仍然可以通过浏览器的后退按钮导航回登录页面。这将通过 $.mobile.changePage 解决(在帖子中演示),但在我的情况下,整个应用程序位于一个文档上,登录页面首先自动显示,这不允许我通过“导航到它” $.mobile.changePage"。

标签: jquery asp.net-mvc jquery-mobile


【解决方案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');;
        }  
    }
});

【讨论】:

  • 我还没有机会对此进行测试,但这不会完全停止导航吗?例如:用户从 stackoverflow.com -> login.cshtml -> page1.cshtml, *presses back button" 但无法返回到 stackoverflow.com 并卡在 page1.cshtml 中。
  • 正如我在回答中告诉您的那样,这将阻止页面更改,但不会跳过此页面。这只是您可以做的一个解决方案。
猜你喜欢
  • 2020-09-04
  • 2021-06-17
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2017-11-21
  • 2021-09-25
  • 2020-01-27
相关资源
最近更新 更多