Обновление PhoneGap DOM не сразу отражается на дисплее - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть приложение Phonegap / jQuery, которое прекрасно работает, однако в одной области DOM изменяется и не отображается, пока какой-либо пользовательский ввод (касание, перетаскивание, что-нибудь) не вызовет повторную визуализацию дисплея. (Это происходит на моем андроид телефоне и планшете, но работает в Chrome)

function reloadSubscriptions(num) {
    if (subscriptionsStore[num]) {
        for (var x in subscriptionsStore[num]) {
            $('#' + x + 'Subscribe').html('<a href="#" onclick="unsubscribe(\'' + x + '\',\'' + num + '\'); return false;">[UN-SUBSCRIBE]</a>');
        }
    }
    $('#busy').hide();  
}

Это последняя функция в цепочке, которая обновляет DOM ... Есть идеи, как запустить приложение для обновления дисплея?

Я бы хотел предоставить APK и больший фрагмент скрипта для демонстрации.

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

Edit:

Исходная HTML-страница включает в себя:

<div id="wrapper">
    <ul id="menuList" class="menu-list"></ul>
    <div id="otherContent"></div>
</div>

При нажатии определенной кнопки в #menuList загружается список опций. Когда они загружены, внутри каждого <li> создается диапазон # <item-id> Subscribe. После того, как список загружен, исходная функция, которую я разместил, условно обновляет диапазон # <item-id> Подписаться.

Отображение изменяется при загрузке списка параметров, но не при обновлении интервалов после факта. Прикосновение к экрану показывает обновление.

Ответы [ 3 ]

1 голос
/ 02 мая 2013

Я видел в 2 приложениях ранее. Кажется, это происходит, когда вы вносите незначительные изменения, например, просто обновляете текст метки. Я думаю, что Android «думает», что ничего не изменилось, и не обновляет веб-просмотр.

Попробуйте изменить что-то «больше» вместе с вашим маленьким изменением, например, переключив прозрачную видимость div (или что-нибудь, что пользователь не заметит).

1 голос
/ 01 марта 2012

я думаю, что вы должны запустить действие обновления JQM на странице, с которой вы работаете как:

$('#somepage').trigger('refresh');

так как из маленького кода, который у вас есть, вы меняете разметку проверьте скриптинг страницы раздел Создание или обновление: важное различие

0 голосов
/ 07 марта 2012

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

<body>
    <div id="wrapper">
        <ul id="menuList" class="menu-list"></ul>
        <div id="otherContent"></div>
    </div>
</body>

<script type="text/javascript">
    function reloadSubscriptions(num) {

        // Tried with comments enabled as well
        //for (i = 0; i < num; i += 1) {
        $('#' + i + 'Subscribe').html(
                '<a href="#" onclick="unsubscribe(\'' + i + '\',\'' + i
                        + '\'); return false;">[UN-SUBSCRIBE]</a>');
        //}

        $('#busy').hide();
    }

    function loadList(num) {
        for (i = 0; i < num; i += 1) {
            $("<li>List text <span id='"+ i+"Subscribe'></span></li>")
                    .appendTo($("#menuList"));

            reloadSubscriptions(i);
        }
    }

    loadList(5);
    // reloadSubscriptions(5);
</script>
...