У нас есть мобильный проект PhoneGap, в котором используется Dojo. На данной HTML-странице, например. index.html, у нас будет подобный тег JavaScript:
<script>
require(["path/to/myApp", "dojo/domReady!"], function(MyApp) {
new MyApp().startup();
});
</script>
path/to/myApp.js будет классом, выполняющим необходимые функции, например:
define(["dojo/_base/declare",
"dojox/mobile/deviceTheme",
"dojox/mobile/compat"],
function(declare) {
return declare(null, {
startup: function() {
// create and display views etc.
}
});
});
То, что мы пытаемся сделать, это реализовать средство автоматического обновления по следующим направлениям:
- При запуске используйте AJAX, чтобы проверить на сервере, актуальна ли версия клиентского приложения.
- Если клиент устарел, отправьте клиенту новый код JavaScript (и/или HTML, CSS) по мере необходимости.
- Клиент сохраняет JavaScript в локальном хранилище на устройстве.
Учитывая эту схему, при запуске клиент будет читать JavaScript из локального хранилища и выполнять этот код, заменяя path/to/myApp.js. С чем я борюсь, так это с привязкой этого к «требуемой» функциональности Dojo AMD. Я думаю, что мне все равно придется использовать загрузчик Dojo для разрешения зависимостей и т. д.
Из того, что я вижу, загрузчик Dojo использует «require» для поиска узла DOM, к которому затем добавляет тег «script», и, наконец, устанавливает атрибут «src» тега script в «path/to/myApp. js" (в этом примере). Мне нужен способ изменить это поведение, чтобы вместо этого запускать обновленный JavaScript, который теперь загружается из локального хранилища на устройстве. Это позволит нам автоматически обновлять наше приложение с сервера, не требуя повторных повторных развертываний в магазине приложений для мелких вещей, таких как исправления ошибок.