dijit » Declaration » buildRendering
dijit.Declaration.buildRendering
dojo.require("dijit.Declaration");
defined in dijit/Declaration.js
Usage
function () (view source)
var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef); var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan(); var scripts = dojo.query("> script[type^='dojo/']", src).orphan(); var srcType = src.nodeName; var propList = this.defaults||{}; // map array of strings like [ "dijit.form.Button" ] to array of mixin objects // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes // a bogus third argument to getObject(), confusing it) this.mixins = this.mixins.length ? dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) : [ dijit._Widget, dijit._Templated ]; if(preambles.length){ // we only support one preamble. So be it. propList.preamble = dojo.parser._functionFromScript(preambles[0]); } var parsedScripts = dojo.map(scripts, function(s){ var evt = s.getAttribute("event")||"postscript"; return { event: evt, func: dojo.parser._functionFromScript(s) }; }); // do the connects for each <script type="dojo/connect" event="foo"> block and make // all <script type="dojo/method"> tags execute right after construction this.mixins.push(function(){ dojo.forEach(parsedScripts, function(s){ dojo.connect(this, s.event, this, s.func); }, this); }); propList.widgetsInTemplate = true; propList._skipNodeCache = true; propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">"; // console.debug(propList.templateString); // strip things so we don't create stuff under us in the initial setup phase dojo.query("[dojoType]", src).forEach(function(node){ node.removeAttribute("dojoType"); }); // create the new widget class dojo.declare( this.widgetClass, this.mixins, propList );