On 01/30/2013 11:36 AM, Daniel Renfro wrote:
> We're finding that when using jQuery's .ready() (or similar)
> function, the callbacks seem to execute in different (unexepected,
> browser-dependent) order. This causes errors.

jQuery will execute ready events in the order bound.  See e.g.
http://stackoverflow.com/questions/3934570/order-of-execution-of-jquery-document-ready
(the mechanism in  latest jQuery is now a Promise, but it's still in order).

So if the ResourceLoader dependency chain is strictly right, it should
execute in order.  If not, it's a bug in either jQuery or ResourceLoader.

> Using the WikiEditor extension as a specific example: Customizing the
> WikiEditor-toolbar is one of the specific cases where we've
> encountered problems. First, the WikiEditor provides no good events
> to bind to once the toolbar is loaded.

I just added this.  The event is attached to the main textbox used by
the toolbar (same as the previous custom events).  So to listen, do:

$( '#wpTextbox1' ).on( 'wikiEditor-toolbar-doneInitialSections',
function () {

} );

WikiEditor is using eachAsync, which uses setTimeout internally.
Therefore, even if a ready event is bound afterwards, it's not enough.
Hence, the new event.


> My questions: It recently dawned on me that executing our code within
> a $(document).ready(); callback might not be necessary as the
> JavaScript for each ResourceLoader module is executed in its own
> callback on the client-side.

Only in production mode, so don't rely on it.  You can do your own
immediately executing anonymous function like
https://www.mediawiki.org/wiki/Manual:Coding_conventions/JavaScript#Closure

> Is it a good idea to avoid binding our code to jQuery's ready event?

If you're not sure if your code is running after ready, bind with
$(document).ready .  It will be immediately executed, so you're not
losing much.

Matt Flaschen

_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to