]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | /**\r |
2 | *\r | |
3 | */\r | |
4 | Ext.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 |