jQuery Mobile - Проблемы с настройкой showPageLoadingMsg для работы со страницей до или страницей - PullRequest
6 голосов
/ 14 сентября 2011

У меня вторая неделя, когда я пытаюсь решить эту проблему, чтобы получить сообщение о загрузке для правильного отображения: - (

Мне просто очень тяжело получать события pagebeforecreate или pagebeforeshowдля запуска $ .mobile.showPageLoadingMsg ().

Вот ссылка на пример на jsfiddle:

    [http://jsfiddle.net/7fxQf/25/][1]

Обратите внимание, что jsFiddle ссылается на мобильную библиотеку 1.0b3.

Вот пример базового фрагмента кода, который должен работать, но не работает:

$('#mypageone').live('pagebeforecreate', function (event, ui) {
   alert('Just selected page one!');
   //HEY!!! the page load never pops up :-(
   $.mobile.loadingMessage = "this msg set on live pageshow from mypageone...";
   $.mobile.pageLoading();
   $.mobile.showPageLoadingMsg();
  calcLongList();  //simple list generation of a 1000 lines to screen
 //$.mobile.hidePageLoadingMsg();
});

Я могу получить предупреждение, но, к сожалению, не сообщение о загрузке, когда страница действительно загружается.

... но, однако, если изменить только на "просмотр страницы", появится сообщение о загрузке, но, конечно, через 5-10 секунд потребуется, чтобы сформировать список :-( ... что, конечно, не то, что яхочу.

Кроме того, не имеет значения, если я закомментирую функцию calcLongList или нет ... сообщение о загрузке страницы ведет себя так же: работает для 'pageshow' ... но не для 'pagebeforeshow' или«страница перед созданием» ...d Я дергаю себя за волосы, пытаясь понять, что я могу делать неправильно?

Любой совет или руководство, несомненно, будут оценены, спасибо заранее

Ответы [ 4 ]

21 голосов
/ 19 октября 2011

Когда jQM показывает индикатор загрузки, он добавляет класс к html-объекту (.ui-loading), который удаляет с помощью $ .mobile.hidePageLoadingMsg (). Однако в некоторых случаях он не добавляет этот класс в html (потому что не может - попробуйте добавить его вручную).

Простое (и немного грязное) исправление - добавление класса вручную не в html-объект, а в тело:

$('body').addClass('ui-loading');

Чтобы удалить загрузочный счетчик, просто удалите класс снова:

$('body').removeClass('ui-loading');
2 голосов
/ 23 ноября 2012

Если у вас есть проблема с отображением текстового сообщения, попробуйте изменить текст настройки jquery mobile.js, видимый для TRUE файла, следующим образом:

(function( $, window ) {
    // DEPRECATED
    // NOTE global mobile object settings
    $.extend( $.mobile, {
        // DEPRECATED Should the text be visble in the loading message?
        loadingMessageTextVisible: **undefined**,

        // DEPRECATED When the text is visible, what theme does the loading box use?
        loadingMessageTheme: undefined,

        // DEPRECATED default message setting
        loadingMessage: undefined,

TO:

(function( $, window ) {
    // DEPRECATED
    // NOTE global mobile object settings
    $.extend( $.mobile, {
        // DEPRECATED Should the text be visble in the loading message?
        loadingMessageTextVisible: **true**,

        // DEPRECATED When the text is visible, what theme does the loading box use?
        loadingMessageTheme: undefined,

        // DEPRECATED default message setting
        loadingMessage: undefined,

AXL

1 голос
/ 08 мая 2012

Я провел несколько тестов, и в моем проекте это привело к проблеме синхронизации, если я вставил задержку или ошибку в код, показывающий счетчик ожидания .. Когда я удаляю его и прослеживаю журнал вместе с пользовательским интерфейсом, я вижу, что на это требуется время, а визуализация пользовательского интерфейса - не загрузка данных. С уважением Ким

1 голос
/ 29 сентября 2011

У меня та же проблема.Я не уверен, вызвано ли это тем же или нет, но у меня панель инструментов нижнего колонтитула встроена.Поэтому я прокручиваю до нижней части страницы, нажимаю на страницу для загрузки, а затем на следующей странице вызываю сообщение о загрузке (я делаю некоторую динамическую загрузку содержимого ajax).Похоже, что сообщения о загрузке нет, но оно есть на самом деле.У него просто «верхнее» значение около 1700 пикселей, поэтому я его не вижу.Когда я нажимаю ссылку на ту же самую страницу, которая находится вверху страницы, я вижу сообщение о загрузке нормально.

Похоже, jQM пытается сохранить сообщение о загрузке или что-то в этом роде.Не уверен.

Итак ... вот ваше руководство.У меня пока нет ответа, кроме как сделать что-то вроде:

$(".ui-loader").css({"top": "400px"});

Это, вероятно, то, что я сделаю.Надеюсь, что это помогает!

РЕДАКТИРОВАТЬ

Это то, что я закончил с необходимостью сделать.Проверено и все работает.Когда я начинаю свой вызов ajax:

$(".ui-loader").css({"display": "block", "top": "252px !important" });

Когда вызов ajax завершается:

$(".ui-loader").css({ "display": "none" });

РЕДАКТИРОВАТЬ 2

Извините, после некоторого тестированияЯ понял, что вы не хотите устанавливать "display: block;"или "дисплей: нет;"используя функцию .css () jQuery.Это установит атрибут style для самого элемента и переопределит то, что хочет сделать jQM.Сделайте это вместо этого - при начале вызова:

$(".ui-loader").css({ "top": "252px !important" });
$.mobile.showPageLoadingMsg();

Когда закончится загрузка:

$.mobile.hidePageLoadingMsg();
...