New file |
0,0 → 1,70 |
if(!dojo._hasResource["dojox.dtl.render.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.dtl.render.html"] = true; |
dojo.provide("dojox.dtl.render.html"); |
|
dojox.dtl.render.html.sensitivity = { |
// summary: |
// Set conditions under which to buffer changes |
// description: |
// Necessary if you make a lot of changes to your template. |
// What happens is that the entire node, from the attached DOM Node |
// down gets swapped with a clone, and until the entire rendering |
// is complete, we don't replace the clone again. In this way, renders are |
// "batched". |
// |
// But, if we're only changing a small number of nodes, we might no want to buffer at all. |
// The higher numbers mean that even small changes will result in buffering. |
// Each higher level includes the lower levels. |
NODE: 1, // If a node changes, implement buffering |
ATTRIBUTE: 2, // If an attribute or node changes, implement buffering |
TEXT: 3 // If any text at all changes, implement buffering |
} |
dojox.dtl.render.html.Render = function(/*DOMNode?*/ attachPoint, /*dojox.dtl.HtmlTemplate?*/ tpl){ |
this._tpl = tpl; |
this._node = attachPoint; |
this._swap = dojo.hitch(this, function(){ |
// summary: Swaps the node out the first time the DOM is changed |
// description: Gets swapped back it at end of render |
if(this._node === this._tpl.getRootNode()){ |
var frag = this._node; |
this._node = this._node.cloneNode(true); |
frag.parentNode.replaceChild(this._node, frag); |
} |
}); |
} |
dojo.extend(dojox.dtl.render.html.Render, { |
sensitivity: dojox.dtl.render.html.sensitivity, |
setAttachPoint: function(/*Node*/ node){ |
this._node = node; |
}, |
render: function(/*dojox.dtl.HtmlTemplate*/ tpl, /*Object*/ context, /*dojox.dtl.HtmlBuffer?*/ buffer){ |
if(!this._node){ |
throw new Error("You cannot use the Render object without specifying where you want to render it"); |
} |
|
buffer = buffer || tpl.getBuffer(); |
|
if(context.getThis() && context.getThis().buffer == this.sensitivity.NODE){ |
var onAddNode = dojo.connect(buffer, "onAddNode", this, "_swap"); |
var onRemoveNode = dojo.connect(buffer, "onRemoveNode", this, "_swap"); |
} |
|
if(this._tpl && this._tpl !== tpl){ |
this._tpl.unrender(context, buffer); |
} |
this._tpl = tpl; |
|
var frag = tpl.render(context, buffer).getParent(); |
|
dojo.disconnect(onAddNode); |
dojo.disconnect(onRemoveNode); |
|
if(this._node !== frag){ |
this._node.parentNode.replaceChild(frag, this._node); |
dojo._destroyElement(this._node); |
this._node = frag; |
} |
} |
}); |
|
} |