2010-09-27 1 views
2

Мне особенно нравится требовать другие классы javascript, используя Google Closure, но мне интересно, можно ли использовать goog.require для ленивой загрузки других классов javascript. Когда я пытаюсь использовать goog.require после загрузки страницы, кажется, что она обновляется или исчезает :( Любой способ получить скрипт по требованию и, возможно, настроить его с помощью обратного вызова, поэтому я могу запустить некоторый javascript, когда это будет сделано ? загрузкаПользователь Google Закрытие для ленивой загрузки javascript

ответ

3

goog.require не предназначена для использования для загрузки любого скрипта Однако, нет ничего особенного в файлах сценарий отложенной загрузки по требованию Просто создать узел динамически и добавить его на страницу:..

function require(src) 
{ 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = src; 
    document.body.appendChild(script); 
} 

Вышеуказанная функция загрузит сценарий с URL-адреса, указанного параметром src.

Обратный вызов - это еще одна история. Вы не получите событие, запущенное после загрузки сценария. Если вы хотите получать уведомления о загрузке скрипта, вам необходимо уведомить загруженный скрипт из самого скрипта. Например, вы можете вызвать предопределенную функцию на своей странице в качестве последнего оператора в файле javascript, который вы загружаете. Как только эта функция вызывается, вы знаете, что сценарий завершил загрузку. Однако для этого вам необходимо изменить загруженный файл сценария.

Аналогичный подход для с уведомлением Загруженный скрипт используется с JSONP. Данные JSONP извлекаются с использованием того же подхода выше - вы добавляете динамически созданный узел сценария на страницу. Однако по умолчанию возврат данных с сервера не вызывает изменения состояния. Вызов функции необходим, чтобы указать, что что-то произошло (например, данные прибыли). С помощью JSONP вы указываете имя функции в URL-адресе запроса JSONP. Затем сервер возвращает часть javascript, где вызывается указанная вами функция, передавая данные JSON в аргументе.

Все это означает, что вы должны иметь возможность вызвать функцию на странице после загрузки скрипта.

+0

добавляющих файлы сценарий не трудно, но красота goog.require (которая на самом деле запускает файл сценарий для включения, когда вы запускаете приложение до компиляции закрытия) заключается в том, что он выясняет, был ли этот файл сценария уже включен на страницу и не загружает его снова, если он есть. Значит, вы не знаете, существует ли такая вещь в закрытии? (как, например, некоторые методы удобства и т. д.). – chrismarx

+0

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