Я использую 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
);
}
}