On Sat, Sep 12, 2009 at 1:16 PM, kkasravi <[email protected]> wrote:
> Interesting, so the includeScript assumes the resource exists or
> that it must be fetched?

Yes, more or less. The name passed to includeScript eventually gets
passed on to your loader, which is provided by the containing page in
un-cajoled (= privileged) code. The cajoled code may get the name:

  "foo/bar"

and the loader might translate that to a fetch of:

  "http://example.com/software/foo/bar.vo.js";

or perhaps even:

  "http://caja.appsopt.com/cajole?url=http://example.com/software/foo/bar.js";

> From the usage it looks like the call is synchronous.

Yes. You can only call includeScript with a string literal (= known at
compile time), at which point the framework can guarantee that the
module you ask for will be available synchronously. If you want to
includeScript with a dynamically computed identifier, you do:

  var identifier = /* something */;
  Q.when(includeScript.async(identifier), function() {
    // This is an async callback
    // Here, you react to the loading of the script
  });

> Is there an equivalent includeModule?

This is it. :) includeScript includes a Valija module into the current
Valija context. We called it includeScript because it mimics the
semantics of the <script src="..."> tag -- in that the code that is
loaded shares the same global variables as the code that loaded it.

> Somewhat related to modules and valija sandboxes:
> How do events work? Assuming the existence of custom events
> and a subscriber has registered for an event where the producer
> is within a different valija sandbox?

We don't have a specialized event system.

Domita provides a tamed setTimeout() method that behaves pretty much
just like the real one (if it isn't, tell us: it might be a bug).

Between any two pieces of code -- Valija, Cajita or otherwise, whether
or not in the same Valija sandbox -- events just cause code to be
executed. Nothing special.

> Also what happens if the
> event references module instances that the producer has included
> prior to firing the event but the subsciber hasn't?

Again, we don't do any special thing about this. You have to check
that you have what you need when you react to an event. The module
loading is just another asynchronous invocation like any other.

We do provide the promise API (the 'Q' object) that simplifies things
somewhat. So if I were to do:

  var moduleVow = includeScript.async(identifier);

the variable 'moduleVow' now contains a "promise" for the loading of
the module. I demonstrated this in shortcut form above, without
assigning the promise to a variable. However, here, if you have
several things that need to wait, you can do in any number of places:

  // Somwhere ...
  Q.when(moduleVow, function() { /* do something */ });

  // And somewhere else entirely ...
  Q.when(moduleVow, function() { /* do something else entirely */ });

Cheers,

Ihab

-- 
Ihab A.B. Awad, Palo Alto, CA

Reply via email to