Моя цель - показать другую первую страницу в зависимости от того, вошел ли пользователь в систему или нет. Проверка входа происходит с использованием синхронного вызова Ajax, результат которого решает, показывать ли диалоговое окно входа в систему или первую пользовательскую страницу.Программно изменить первую страницу jQuery Мобильные шоу
Обычный способ сделать это - установить $.mobile.autoInitialize = false
, а затем инициализировать программно, как описано в ответе this question. По какой-то причине это не сработает, вместо этого другая страница загружается каждый раз.
Я решил отказаться от этого способа и попробовать другой паркур. Теперь я использую местозаполнитель, пустую страницу запуска, которая должна отображаться до тех пор, пока выполняется проверка входа. После проверки входа в систему он должен автоматически измениться. Это делается путем вызова функции, которая выполняет вызов ajax, необходимый для аутентификации на событии pagechange
, который вводит эту стартовую страницу. Функция также заботится о переходе на страницу результатов.
Хитрость в том, что это не совсем так. Вместо этого он показывает правильную страницу всего за короткое время, а затем возвращается обратно к заполнителю. Вызов preventDefault
в pagechange
не помешал этому, как описано в tutorial on dynamic pages. Добавление таймера фиксировало это, что заставило меня думать, что местозаполнитель не был полностью завершен, когда pageshow
был уволен (согласно this page на странице событий), или некоторый побочный эффект от начальной загрузки страницы по-прежнему сохраняется.
Я действительно не знаю, как исправить эту кажущуюся тривиальную, но обременительную проблему. Что заставляет это дополнительное изменение вернуться к начальной странице? Кроме того, если мой подход к перехвату начальной загрузки страницы неверен, вместо этого был бы правильный подход?
Я использую jQuery Mobile 1.4.0 и jQuery 1.10.2 (1.8.3 до).
EDIT: Ниже приведен код моей последней попытки, прежде чем я разместил здесь вопрос. Он не работает: preventDefault
не препятствует переходу на страницу-заполнитель.
$(document).on("pagebeforechange", function(e, data) {
if (typeof(data.options.fromPage) === "undefined" && data.toPage[0].id === "startup") {
e.preventDefault();
initLogin();
}
});
function initLogin() {
// ... Login logic
if (!loggedIn) // Pseudo
$('body').pagecontainer("change", "#login", {});
}
использовать 'pagebeforechange', а по состоянию на jQM 1.4 вы можете использовать' pagebeforetransition'. «pagechange» - это последнее событие, которое срабатывает на странице, поэтому вы видите страницу в секунду. – Omar
@Omar Вы поняли неправильно. Страница, которую я вижу на короткое время, - это тот, который я хочу видеть, а не местозаполнитель. Он снова переопределяется исходной страницей. –
Это первая страница диалога? – Omar