Si vous souhaitez participer à la vie de dojotookit-fr, nous recherchons : des traducteurs, des personnes pour animer le blog ou écrire des articles, etc...
Prévenez nous par mail (ben_AT_dojotoolkit-fr_DOT_org) ou par chat (#dojo-fr sur irc.freenode.net)

Syntaxe Programmatique, points à retenir

La syntaxe programmatique est légèrement plus complexe que la syntaxe déclarative mais apporte une grande souplesse et un grand contrôle de ce qui est fait.

Principe

Comme dans tout langage objet, il faut commencer par créer une nouvelle instance d'un widget. On lui attribue ses propriétés puis on le place à l'endroit désiré du DOM.

Utilisation

La création d'un widget se fait via la commande "new" :

1
var btn  = new dijit.form.Button();

Attention, à chaque dojoType doit correspondre un dojo.require
1
dojo.require("dijit.form.Button");

Le constructeur d'un widget accepte 2 paramètres :

  • (facultatif) Les propriétés du widget (sous forme d'objet)
  • (facultatif) Le noeud DOM qui va être remplacé par le widget.

Les propriétés sont sous la forme d'objet :

1
2
3
4
var props= {
    label:" mon test",
    id:"btnTest"
}

Note : Les propriétés de l'objet sont les même que celles utilisées en syntaxe déclarative (pour le bouton : dijit.form.Button).

Ainsi pour créer un bouton qui aura le label "test" et qui sera placé dans le div "divtest" :

1
2
3
4
5
var props= {
    label:"mon test",
    id:"btnTest"
}
var btn  = new dijit.form.Button(props, dojo.byId("divtest"));

la méthode startup

Un grande majorité des widgets terminent leur initialisation par une méthode startup(). Cette méthode est appelée de manière invisible lorsque vous utilisez la syntaxe déclarative. En revanche en syntaxe programmatique, il faut le faire manuellement :

1
2
3
4
5
6
var props= {
    label:"mon test",
    id:"btnTest"
}
var btn  = new dijit.form.Button(props, dojo.byId("divtest"));
btn.startup();

Il existe des cas ou vous ne devez pas utiliser le startup :

  • Dans le cas ou votre widget est ajouté à un widget de type layout (exemple : BorderContainer, StackContainer, etc...) en utilisant leur méthode addChild(). Celle-ci se charge d'exécuter le startup().
  • De même lorsque votre widget est ajouté à un contentPane via la méthode setContent(). Celle-ci se chargera aussi d'effectuer le startup() (Mais attention, uniquement si djConfig contient l'instruction "parseOnLoad:true" !)

D'une syntaxe à l'autre

Pour passer de la syntaxe déclarative à la syntaxe programmatique, il suffit donc de retranscrire les attributs en objet javascript et de bien penser au startup().
Exemple :

1
<div jsId="_button" dojoType="dijit.form.Button" label="mon test"></div>

deviens :
1
<div id="btntest"></div>

1
2
3
4
5
var props= {
    label:" mon test"
}
var btn  = new dijit.form.Button(props, dojo.byId("btntest"));
btn.startup();