Есть ли у coffeescript событие onLoad для браузера? - PullRequest
4 голосов
/ 12 июля 2011

Есть ли способ запустить какой-нибудь код в браузере после того, как coffeescript скомпилирует и запустит все файлы сценариев в заголовке? Что-то вроде:

coffee.onCompiled () -> console.log "Я загрузил все файлы кофе"

Как еще я могу получить это поведение? (пожалуйста, не предлагайте setTimeout)

1 Ответ

9 голосов
/ 12 июля 2011

Сначала я думал, что вы спрашиваете о том, как прикрепить обратный вызов к window.onload из CoffeeScript (что, конечно, очень просто, так как «Это просто JavaScript»), но теперь я понимаю, что вы спрашиваете, как Вы гарантируете, что код выполняется после всех

<script type="text/coffeescript" src="..."></script>

теги были выполнены при использовании coffee-script.js.

Одним из решений является установка обратного вызова в последнем загруженном CoffeeScript. Начиная с версии 1.1.0, coffee-script.js гарантирует, что все теги CoffeeScript script выполняются по порядку (хотя обратите внимание, что они будут выполняться только после выполнения всех тегов JavaScript script). Так, например, если вы поставите

<script type="text/coffeescript">
  onReady()
</script>

после всех остальных тегов script и определите window.onReady где-нибудь еще, тогда эта функция будет вызываться после загрузки всех скриптов. Если вы сделали это

 $ -> onReady()

(с jQuery), тогда вы убедитесь, что DOM готов, как и все сценарии.

Обновление: Я написал, что это «одно решение», потому что я не был уверен на 100%, существует ли обратный вызов, который coffee-script.js вызывает после запуска всех сценариев. Но после проверки источника я могу с уверенностью сказать, что это не так, поэтому решение only состоит в том, чтобы поместить код в последний тег <script type="text/coffeescript">. (Будь то встроенный файл или файл .coffee не имеет значения.)

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