2016-03-07 3 views
8

Я пытаюсь преобразовать мое приложение Asynchronous JavaScript загрузка с:Как загрузить страницу JavaScript после асинхронной загрузки моего файла манифеста

<%= javascript_include_tag "application", async: true %> 

Проблема заключается в том, что любые сценарии страниц конкретного бегутся перед тем Jquery загружается асинхронно. Как я могу отложить их до загрузки файла манифеста application.js.

Я попробовал обернуть свою страницу js в $(window).load(function(){});, но это не помогло. Я до сих пор вижу следующее сообщение об ошибке:

Uncaught ReferenceError: $ is not defined 

Update:

Это, кажется, работает для меня, но я хотел бы кто-то, чтобы подтвердить, что это правильный подход:

<%= javascript_include_tag "application", async: true, onload: 'pageScripts()' %> 

Затем скрипт страница как:

<script> 
    function pageScripts() { 
    // do something 
    } 
</script> 
+0

Почему бы просто не написать свой javascript внутри области «window.onload»? – jayant

ответ

10

Ваш подход правильный, однако я бы предложил ограничить ваш Async только для производства, так как в разработке Sprockets еще не объединил все файлы.

<%= javascript_include_tag "application", async: Rails.env.production?, onload: 'pageScripts()' %> 
+1

Спасибо, я дам вам чек, так как вам надоело отвечать. BTW, вы можете протестировать это в разработке, поместив это в development.rb 'config.assets.debug = false' .. это заставляет файл манифеста в режиме dev, но, как правило, лучше сделать' async: Rails.env. производства? », как вы предложили. Благодарю. – Abram

+0

В чем разница между: async => true и async: Rails.env.production? ? –

+1

@ KickButtowski разница заключается в том, что когда ': async => true', он всегда будет Async, но когда' async: Rails.env.production? 'Будет асинхронно только тогда, когда он будет в производстве – SsouLlesS

Смежные вопросы