1

我正在使用 jQuery mobile 1.2,并且正在尝试编写一些代码来处理所有页面初始化。

例如,假设我需要在每个页面中执行某些操作之前检查用户是否首先登录到应用程序。如果用户未登录,我应该重定向到另一个页面,例如登录。

例如,下面的代码应该在每个页面初始化之前执行:

$(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事件吗?

4

1 回答 1

1

只是我的两分钱,但如果可能的话,页面重定向应该在服务器端完成,例如:如果您请求页面,服务器代码将验证您是否经过身份验证。如果是,它将返回您要求的页面,否则它将返回登录页面。

如果出于某种原因您必须在客户端执行所有操作,则应在更改页面之前检查用户是否已登录。如果pagebeforecreate被解雇,那么页面被创建,现在改变主意为时已晚(可能)。

来自jQM 文档

请注意,通过绑定到 pagebeforecreate,您可以在 jQuery Mobile 的默认小部件自动初始化之前操作标记。例如,假设您想通过 JavaScript 而不是在 HTML 源中添加数据属性,这就是您要使用的事件。

对我来说,这看起来就像 pagebeforecreate 的事件处理程序仅用于修改即将显示的页面。似乎用于完成您正在做的事情的更好事件是pagebeforechange事件:

此事件在任何页面加载或转换之前触发。回调可以通过在传递给回调的事件对象上调用 preventDefault 来阻止 changePage() 函数的执行。(...) 应该注意,回调可以修改 toPage 和 options 属性来改变当前 changePage() 调用的行为。因此,例如,toPage 可以从回调中映射到不同的 url 以进行某种重定向。

于 2012-11-11T22:41:40.943 回答