Связь между функциями ongodyLoad () / onDeviceReady () в Phonegap и функцией $ (document) .ready () "Jquery. - PullRequest
26 голосов
/ 18 февраля 2011

Я использую PhoneGap + jQuery Mobile в Android, я запутался в функциях PhoneGap "onBodyLoad () / onDeviceReady ()" и Jquery "$ (document) .ready ()".

в PhoneGapдокументы:

PhoneGap состоит из двух кодовых баз: родной и JavaScript.Во время загрузки собственного кода отображается пользовательское изображение загрузки.Однако JavaScript загружается только после загрузки DOM.Это означает, что ваше веб-приложение может потенциально вызывать функцию JavaScript PhoneGap до ее загрузки.

Событие PhoneGap deviceready возникает после полной загрузки PhoneGap.После того, как устройство сработало, вы можете безопасно вызывать функцию PhoneGap.

Как правило, вы захотите подключить прослушиватель событий с document.addEventListener после загрузки DOM документа HTML.

В jQuery doc:

Хотя JavaScript предоставляет событие загрузки для выполнения кода при визуализации страницы, это событие не срабатывает, пока все ресурсы, такие как изображения, не будут получены полностью.В большинстве случаев сценарий может быть запущен, как только иерархия DOM будет полностью построена.Обработчик, переданный в .ready (), гарантированно будет выполнен после того, как DOM будет готов, поэтому обычно это лучшее место для присоединения всех других обработчиков событий и запуска другого кода jQuery.При использовании сценариев, которые полагаются на значение свойств стиля CSS, важно ссылаться на внешние таблицы стилей или вставлять элементы стиля, прежде чем ссылаться на сценарии.

В тех случаях, когда код опирается на загруженные ресурсы (например, если размерытребуется изображение), код должен быть помещен в обработчик для события загрузки.

Мои эксперименты показывают, что ready () всегда раньше, чем onDeviceReady (), как это объяснить?Как я должен их использовать?Должен ли я добавить ready () в onDeviceReady (), чтобы сделать каждый вызов безопасным?

Заранее спасибо.

С уважением, Крис

1 Ответ

31 голосов
/ 19 февраля 2011

$(document).ready всегда будет запускаться первым, потому что он срабатывает, когда все элементы DOM загружены. Изображения, функции JavaScript, CSS и т. Д. Могут не загружаться к этому времени.

Таким образом, PhoneGap заставил вас добавить метод onload в метод onLoad тела, чтобы он срабатывал, когда эта конкретная часть DOM готова. Как только DOM подготовлен, вы создаете прослушиватель событий, чтобы убедиться, что сам phonegap.js готов (а не только пользовательский интерфейс приложения, например). Только после загрузки phonegap.js вы можете использовать функции, которые он предоставляет.

Так что да, сначала будет запускаться $(document).ready, но это не значит, что вы можете использовать phonegap.js (вызовы 'api'). Вы не можете поместить $(document).ready в другую функцию (насколько я знаю), так как она вызывается загрузкой DOM. Однако вы можете (но не должны) вызывать функцию onDeviceReady из $(document).ready. Проблема заключается в том, что если устройство НЕ действительно готово, вызовы API не будут выполняться.

Так что я бы продолжил использовать цепочку тела onLoad / onDeviceReady, которую они настроили. Дайте мне знать, если это требует дополнительной проработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...