jquery mobile - 取决于条件取消pageinit事件

时间:2012-11-09 12:09:47

标签: jquery jquery-mobile javascript-events

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

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

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

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

第A页:

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

Page B:

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

pagebeforecreate代码应该在pageinit之前运行(默认情况下会被正确触发),但也应该取消页面转换到A或B,并且不应该触发pageinit。

请问您如何从“pagebeforecreate”部分取消pageinit事件?

1 个答案:

答案 0 :(得分:1)

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

如果由于某种原因你必须做客户端的所有事情,你应该检查用户是否在更改页面之前登录。如果触发了pagebeforecreate,那么将会创建页面,现在就改变主意(可能),为时已晚。

来自jQM docs

  

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

对我而言,这类似于pagebeforecreate的事件处理程序仅用于修改即将显示的页面。似乎用来完成你正在做的事情的更好的事件是pagebeforechange事件:

  

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