55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
Ext.define('Ext.mixin.Templatable', {
|
|
extend: 'Ext.mixin.Mixin',
|
|
|
|
mixinConfig: {
|
|
id: 'templatable'
|
|
},
|
|
|
|
referenceAttributeName: 'reference',
|
|
|
|
referenceSelector: '[reference]',
|
|
|
|
getElementConfig: function() {
|
|
return {
|
|
reference: 'element'
|
|
};
|
|
},
|
|
|
|
getElementTemplate: function() {
|
|
var elementTemplate = document.createDocumentFragment();
|
|
elementTemplate.appendChild(Ext.Element.create(this.getElementConfig(), true));
|
|
return elementTemplate;
|
|
},
|
|
|
|
initElement: function() {
|
|
var prototype = this.self.prototype;
|
|
|
|
prototype.elementTemplate = this.getElementTemplate();
|
|
prototype.initElement = prototype.doInitElement;
|
|
|
|
this.initElement.apply(this, arguments);
|
|
},
|
|
|
|
linkElement: function(reference, node) {
|
|
this.link(reference, node);
|
|
},
|
|
|
|
doInitElement: function() {
|
|
var referenceAttributeName = this.referenceAttributeName,
|
|
renderElement, referenceNodes, i, ln, referenceNode, reference;
|
|
|
|
renderElement = this.elementTemplate.cloneNode(true);
|
|
referenceNodes = renderElement.querySelectorAll(this.referenceSelector);
|
|
|
|
for (i = 0,ln = referenceNodes.length; i < ln; i++) {
|
|
referenceNode = referenceNodes[i];
|
|
reference = referenceNode.getAttribute(referenceAttributeName);
|
|
referenceNode.removeAttribute(referenceAttributeName);
|
|
this.linkElement(reference, referenceNode);
|
|
}
|
|
}
|
|
});
|