Заголовок div невидим после ручного вызова (jQueryMobile) $ .mobile.changePage - PullRequest
0 голосов
/ 21 марта 2012

Я использую jQuery Mobile для написания приложения PhoneGap и пытаюсь получить эффект, часто встречающийся в приложениях iPhone: при первой загрузке приложения (поскольку вы еще не настроили его) приложение переворачивается, и вы см. страницу настроек.

У меня все функциональные биты работают должным образом, но есть только одна проблема: заголовок div моей страницы настроек не отображается.

<div data-role="page" id="settings" data-theme="c">
    <div data-role="header" data-theme="a">
        <h1>Settings</h1>
        <a href="#home" 
            data-icon="check" 
            class="ui-btn-right" 
            data-transition="flip" 
            data-theme="a"
        >Done</a>
    </div>
    <div data-role="content">
        <!-- ... -->

Это код, который переворачивается на страницу настроек:

$.mobile.changePage($("#settings"), { transition: 'flip' });

Если после загрузки приложения и автоматического перехода на страницу настроек (с невидимым заголовком) я обновляю страницу, появляется заголовок. Это становится скрытным только в том случае, когда я вручную переключаюсь на страницу настроек. Например, на главном экране, если я нажимаю кнопку настроек, она переходит на страницу настроек, а заголовок не скрывается.

Я также попытался просмотреть свойства css заголовка div и его дочерних элементов, чтобы увидеть, есть ли разница между двумя вариантами использования, но я не могу их найти.

Итак, что теперь?

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

onDeviceReady: function () {
    analytics.trackStart();

    //if no show has been selected, switch to settings page
    if (this.getProperty('activeShowId') === null) {
        var idFromCache = cache.getItem(this.getProperty('localStoragePrefix') + 'activeShowId');
        if (idFromCache === null) {
            //no show selected, show settings page
            $.mobile.changePage($("#settings"), { transition: 'flip' });
            return;
        } else {
            //select the corresponding show on the settings page
            var radio = $("#settings input:radio[value=" + idFromCache + "]"),
                label = radio.next();
            radio.prop('checked', true);
            label.attr('data-theme','e').addClass('ui-btn-up-e')
                .removeClass('ui-radio-off').addClass('ui-radio-on')
                .find(".ui-icon").removeClass('ui-icon-radio-off').addClass('ui-icon-shadow').addClass('ui-icon-radio-on');

            var titleFromCache = cache.getItem(this.getProperty('localStoragePrefix') + 'activeShowTitle');

            //TODO:
            if (titleFromCache === null) {
                pgalert('TODO: load show info when title isn\'t cached in localStorage');
            }

            this.setActiveShow(idFromCache, titleFromCache);
        }
    }

    if (this.getProperty('userEmail') === null) {
        var emailFromCache = cache.getItem(this.getProperty('localStoragePrefix') + 'userEmail');
        if (emailFromCache === null) {
            $.mobile.changePage($("#settings"), { transition: 'flip' });
            return;
        } else {
            //fill in the email text field so it's already there if they go to the settings page
            $("#settings #userEmail").val( emailFromCache );
        }
    }

    if ( window && window.plugins && window.plugins.pushNotification && window.plugins.pushNotification.registerCallback ) {
        window.plugins.pushNotification.registerCallback(
            function () {
                console.log('pn cb registered');
            }
            , this.error
        );
    }
}
...