2014-10-29 1 views
1

Я через решения в двух вопросов, связанных с этим - JQuery document.ready vs Phonegap deviceready и Correct way of using JQuery-Mobile/Phonegap together? , и я до сих пор не ближе к решению.

Наша проблема связана с плагинами PhoneGap Build. Мы используем плагин Device для ориентации определенных позиций и размеров компонентов пользовательского интерфейса на iPhone 4 и 5. При этом нам нужно вызвать прослушиватель событий, использовать плагин Device для получения модели устройства, установить переменную (iOSversion = true) а затем использовать эту переменную, когда мы создаем пользовательский интерфейс.

Мы не можем заставить его работать.

Мы используем JQuery Mobile, так что все находится в

$(document).ready(function(

Это

document.addEventListener("deviceready", false); 

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

Проблема заключается в том, что скрипт инициализации пользовательского интерфейса, по-видимому, начинается до того, как прослушиватель событий завершил выполнение того, что он делает, и поэтому iOSversion никогда не верна к моменту запуска скрипта пользовательского интерфейса.

Да, мы могли бы назвать его из onDeviceReady в:

document.addEventListener("deviceready", onDeviceReady, false); 

, но тогда мы не можем проверить в браузере.

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

+0

'mobileinit' пожары, прежде чем' .ready() '(я не знаю, о Cordova). Вы можете отключить авто-init на этом этапе, пока не получите все свои данные, а затем запустите функцию инициализации. – Omar

+0

Вы говорите, что я должен поставить слушателя событий в mobileinit, чтобы сначала запустить плагин Cordova? –

+0

Я не знаком с кордорой. Если вы планируете попробовать, поместите код «mobileinit» после jQuery и перед jQM-библиотекой. По крайней мере, чтобы проверить, какое событие срабатывает раньше, будь то «mobileinit» или «deviceready». На этом этапе вы можете отложить инициализацию страницы, пока не получите все необходимые данные. – Omar

ответ

3

У меня есть ответ.

window.cordova выставлен в Phonegap Build. Поэтому я проверить существование этого с в JQuery $ (документ) .ready нравится:

if (!!window.cordova) { 
// phonegap script has loaded so have our 
// initializeApplication called when the device is ready 
document.addEventListener("deviceready", 
      initializeApplication, false); 
} 
else { 
// running in browser without phonegap so 
// manually call initializeApplication 
initializeApplication(); 
} 
function initializeApplication() { 
// do everything here to initialize the 
// application and its UI 
} 
Смежные вопросы