Je tente de créer des composants d'interface utilisateur simples avec dojo.gfx. J'ai réussi à étendre dojo.gfx.Group, mais je suis hors de ma profondeur en obtenant l'une des formes par défaut dessinées à la surface. En inspectant le rendu SVG dans Firebug, il y a justement un noeud mais pas de rect.Extension de dojo.gfx.Group avec des formes instanciées par défaut
La classe simplifiée ressemble à ceci:
dojo.provide("gfxui.SimpleButton");
dojo.require("dojox.gfx.shape");//-¿ needed?
dojo.require("dojox.gfx.svg");
dojo.require("dojox.gfx._base");
dojo.declare("gfxui.SimpleButton", dojox.gfx.Group, {
constructor: function(){
this.draw();
},
draw:function(){
var bg = this.createRect(this.rect_props);
//var bg = this.createObject(dojox.gfx.Rect);
}
}
gfxui.SimpleButton.nodeType = dojox.gfx.Group.nodeType;
dojo.extend(dojox.gfx.Surface, {
createButton: function(){
var button = this.createObject(gfxui.SimpleButton, null, true);
this.add(button);
return button;
}
});
Et le javascript dans le code HTML ressemble à ceci:
dojo.require("dojox.gfx");
dojo.require("gfxui.SimpleButton");
function init(){
var g = dojox.gfx;
var surface = dojox.gfx.createSurface(dojo.byId("gfx_holder"), 800, 280, "#eee");
var button = container.createButton();
};
dojo.addOnLoad(init);
Oui, c'est en effet sympa car, vous l'avez dit, il n'utilise que l'API gfx publiée. Dans le contexte de la création d'une petite bibliothèque d'interface utilisateur (à des fins de prototypage), je perdrais mon temps à accéder à des propriétés telles que getBoundingBox et la manipulation directe de matrices, ce qui serait bénéfique pour le positionnement automatique. En outre, la sérialisation serait plus délicate. En attendant, j'ai trouvé plus avantageux d'utiliser des widgets et de laisser CSS faire le travail de positionnement, puis dessiner l'interface avec gfx comme démo ici: http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/gfx/ démos/tooltip.html – droid001