Datasheet
Chapter 1: Enhancing Development with Dojo Core
constructor because they’re not part of the class declaration. In other words, if the class didn’t ask for it,
the parser won’t provide it.
Designing Classes for both Declarative and Programmatic Use
It’s perfectly fine to bypass the parser and programmatically create a new instance of a class designed for
declaration in markup. For example, you could write something like this:
var new_thing = new decafbad.things.thingA(
{ alpha: true} ,
dojo.byId(‘someDiv’)
);
This is basically what
dojo.parser
does, after all. However, there are cases where it would be nice
to have a simpler constructor for use in code and still support declaration in markup. This is where a
special ‘‘static’’ class method named
markupFactory
comes in:
dojo.declare("decafbad.things.thingB", null, {
alpha: false,
beta: [ ‘one’, ‘two’ ],
foo: ‘default’,
baz: 456,
constructor: function(alpha, beta, foo, baz) {
this.alpha = alpha;
this.beta = beta;
this.foo = foo;
this.baz = baz;
},
markupFactory: function(args, node, thisClass) {
var instance = new thisClass(
args.alpha, args.beta, args.foo, args.baz
);
return instance;
}
});
In this new
decafbad.things.thingB
class, you can see that there’s both a
constructor
and a
markupFactory
method. The Dojo parser will instantiate objects using the
constructor
, unless it finds
a
markupFactory
method to use instead.
The
markupFactory
method works like a ‘‘static’’ class method in other languages in that it is not called
on individual object instances of a class, but is instead called on the class prototype itself. The parameters
for this method, which are similar to the signature for
constructor
seen earlier, include:
❑
args
— The set of parameters collected from markup attributes
❑
node
— A reference to the DOM node declaring the object instance
❑
thisClass
— A reference to the class for which an instance should be created
18