Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to run RequireJS Modules before all elements are loaded?

I am run jQuery initializations from a RequireJS module.

I have noticed however that RequireJS waits until all page assets are loaded before executing my code.

I am loading some large images into my page, but do not want to wait until they are loaded to setup my jQuery plugins.

Is there a best practice when trying to do this?

Here is my setup:

index.html

<script data-main="js/main.js" src="js/libs/require.js"></script>

main.js

require(["inits"], function(Inits) {
  //Nothing here yet.
});

inits.js

define([
      'jquery', 
      'jquery.plugin1', 
      'jquery.plugin2',
      'etc'
], function ($) {
   //jQuery Document Ready.
   $(function(){
       //Jquery Init Code here
   });
}

I am new to RequireJS, am I doing this wrong?

like image 283
Dustin M. Avatar asked Nov 04 '22 01:11

Dustin M.


1 Answers

Alright, so I have a work around that appears to be working.

Referencing this ticket here:

https://github.com/jrburke/requirejs/issues/463

I moved my script tag with data-main to the end of my body tag.

 <script data-main="js/main.js" src="js/libs/require.js"></script>
 </body>

And then unwrapped my jquery functions:

Before

define([
  'jquery', 
  'jquery.plugin1', 
  'jquery.plugin2',
  'etc'
], function ($) {
   //jQuery Document Ready.
   $(function(){
       //Jquery Init Code here
   });
}

After

define([
  'jquery', 
  'jquery.plugin1', 
  'jquery.plugin2',
  'etc'
], function ($) {
   //Jquery Init Code here with no Ready Wrapper.
}

It seems to be working, and being at the end of the html file "should" prevent there being any problems with the DOM. I am however not entirely comfortable with this approach. I would like to keep this open to see if others have a better idea.

like image 125
Dustin M. Avatar answered Nov 12 '22 15:11

Dustin M.