]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/src/mixin/Templatable.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / src / mixin / Templatable.js
CommitLineData
6527f429
DM
1/**\r
2 *\r
3 */\r
4Ext.define('Ext.mixin.Templatable', {\r
5 extend: 'Ext.Mixin',\r
6\r
7 mixinConfig: {\r
8 id: 'templatable'\r
9 },\r
10\r
11 referenceAttributeName: 'reference',\r
12\r
13 referenceSelector: '[reference]',\r
14\r
15 getElementConfig: function() {\r
16 return {\r
17 reference: 'element'\r
18 };\r
19 },\r
20\r
21 getElementTemplate: function() {\r
22 var elementTemplate = document.createDocumentFragment();\r
23 elementTemplate.appendChild(Ext.Element.create(this.getElementConfig(), true));\r
24 return elementTemplate;\r
25 },\r
26\r
27 initElement: function() {\r
28 var prototype = this.self.prototype;\r
29\r
30 prototype.elementTemplate = this.getElementTemplate();\r
31 prototype.initElement = prototype.doInitElement;\r
32\r
33 this.initElement.apply(this, arguments);\r
34 },\r
35\r
36 linkElement: function(reference, node) {\r
37 this.link(reference, node);\r
38 },\r
39\r
40 doInitElement: function() {\r
41 var referenceAttributeName = this.referenceAttributeName,\r
42 renderElement, referenceNodes, i, ln, referenceNode, reference;\r
43\r
44 renderElement = this.elementTemplate.cloneNode(true);\r
45 referenceNodes = renderElement.querySelectorAll(this.referenceSelector);\r
46\r
47 for (i = 0,ln = referenceNodes.length; i < ln; i++) {\r
48 referenceNode = referenceNodes[i];\r
49 reference = referenceNode.getAttribute(referenceAttributeName);\r
50 referenceNode.removeAttribute(referenceAttributeName);\r
51 this.linkElement(reference, referenceNode);\r
52 }\r
53 }\r
54});\r