Оскільки багато людей запропонували використовувати відкладений варіант, це нормально, доки вам не байдуже, який порядок deviceready
і що mobileinit
відбувається. Але в моєму випадку мені знадобилося кілька pageshow
подій, коли програма завантажувалася вперше, mobileinit
і, по мірі розширення, ті pageshow
/ і т. Д. pagebeforeshow
Події були всі стріляли ранішеdeviceready
завершення, тому я не міг прив’язати їх належним чином, використовуючи відкладені на них. Цей стан перегонів не було гарною справою.
Що мені потрібно було зробити, це переконатися, що "mobileinit" не відбувся, поки після " deviceready
" вже не було звільнено. Оскільки mobileinit
відразу після завантаження JQM я вимикає, що я його вирішив використати jQuery.getScript
ПІСЛЯ deviceready
вже був закінчений.
<script src="cordova-2.2.0.js"></script>
<script src="js/jquery-1.8.2.min.js"></script>
<script src="js/async.min.js"></script>
<script src="js/app.js"></script>
<script>
document.addEventListener(
'deviceready',
function () {
$('body').css('visibility', 'hidden');
$(document).one("mobileinit", function () {
app.init();
$('body').css('visibility', '');
});
$.getScript('js/jquery.mobile-1.2.0.min.js');
},
false
);
</script>
Причина, яку я приховую, полягає в тому, що побічним ефектом цього методу є півтори секунди видимості оригінального документа HTML перед завантаженням jquery.mobile. У цьому випадку приховування додаткової половини секунди порожнього простору вважається кращим, щоб побачити нестилізований документ.