Ext.data.JsonP.Ext_XTemplate({"mixins":[],"code_type":"ext_define","inheritable":false,"component":false,"meta":{},"mixedInto":[],"uses":[],"aliases":{},"parentMixins":[],"superclasses":["Ext.Base","Ext.Template"],"members":{"event":[],"property":[{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"$className","id":"property-S-className"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"configMap","id":"property-configMap"},{"meta":{"private":true},"owner":"Ext.XTemplate","tagname":"property","name":"emptyObj","id":"property-emptyObj"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"initConfigList","id":"property-initConfigList"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"initConfigMap","id":"property-initConfigMap"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"property","name":"isInstance","id":"property-isInstance"},{"meta":{},"owner":"Ext.Template","tagname":"property","name":"isTemplate","id":"property-isTemplate"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"property","name":"self","id":"property-self"}],"css_var":[],"method":[{"meta":{},"owner":"Ext.Template","tagname":"method","name":"constructor","id":"method-constructor"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"append","id":"method-append"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"apply","id":"method-apply"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"applyOut","id":"method-applyOut"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"applyTemplate","id":"method-applyTemplate"},{"meta":{"deprecated":{"text":"as of 4.1. Use {@link #callParent} instead."},"protected":true},"owner":"Ext.Base","tagname":"method","name":"callOverridden","id":"method-callOverridden"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"callParent","id":"method-callParent"},{"meta":{},"owner":"Ext.XTemplate","tagname":"method","name":"compile","id":"method-compile"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"configClass","id":"method-configClass"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"destroy","id":"method-destroy"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"getConfig","id":"method-getConfig"},{"meta":{},"owner":"Ext.Base","tagname":"method","name":"getInitialConfig","id":"method-getInitialConfig"},{"meta":{"protected":true},"owner":"Ext.XTemplate","tagname":"method","name":"getTpl","id":"method-getTpl"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"hasConfig","id":"method-hasConfig"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"initConfig","id":"method-initConfig"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"insertAfter","id":"method-insertAfter"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"insertBefore","id":"method-insertBefore"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"insertFirst","id":"method-insertFirst"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"onConfigUpdate","id":"method-onConfigUpdate"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"overwrite","id":"method-overwrite"},{"meta":{},"owner":"Ext.Template","tagname":"method","name":"set","id":"method-set"},{"meta":{"private":true},"owner":"Ext.Base","tagname":"method","name":"setConfig","id":"method-setConfig"},{"meta":{"protected":true},"owner":"Ext.Base","tagname":"method","name":"statics","id":"method-statics"}],"css_mixin":[],"cfg":[{"meta":{},"owner":"Ext.XTemplate","tagname":"cfg","name":"compiled","id":"cfg-compiled"},{"meta":{},"owner":"Ext.XTemplate","tagname":"cfg","name":"definitions","id":"cfg-definitions"},{"meta":{},"owner":"Ext.Template","tagname":"cfg","name":"disableFormats","id":"cfg-disableFormats"}]},"tagname":"class","extends":"Ext.Template","html":"
Hierarchy
Ext.BaseExt.TemplateExt.XTemplateRequires
Files
A template class that supports advanced functionality like:
\n\nXTemplate provides the templating mechanism built into Ext.view.View.
\n\nThe Ext.Template describes the acceptable parameters to pass to the constructor. The following examples\ndemonstrate all of the supported features.
\n\nThis is the data object used for reference in each code example:
\n\nvar data = {\n name: 'Don Griffin',\n title: 'Senior Technomage',\n company: 'Sencha Inc.',\n drinks: ['Coffee', 'Water', 'More Coffee'],\n kids: [\n { name: 'Aubrey', age: 17 },\n { name: 'Joshua', age: 13 },\n { name: 'Cale', age: 10 },\n { name: 'Nikol', age: 5 },\n { name: 'Solomon', age: 0 }\n ]\n};\n
\n\nThe tpl tag and the for operator are used to process the provided data object:
\n\nExamples:
\n\n<tpl for=\".\">...</tpl> // loop through array at root node\n<tpl for=\"foo\">...</tpl> // loop through array at foo node\n<tpl for=\"foo.bar\">...</tpl> // loop through array at foo.bar node\n
\n\nUsing the sample data above:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Kids: ',\n '<tpl for=\".\">', // process the data.kids node\n '<p>{#}. {name}</p>', // use current array index to autonumber\n '</tpl></p>'\n);\ntpl.overwrite(panel.body, data.kids); // pass the kids property of the data object\n
\n\nAn example illustrating how the for property can be leveraged to access specified members of the provided data\nobject to populate the template:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Title: {title}</p>',\n '<p>Company: {company}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">', // interrogate the kids property within the data\n '<p>{name}</p>',\n '</tpl></p>'\n);\ntpl.overwrite(panel.body, data); // pass the root node of the data object\n
\n\nFlat arrays that contain values (and not objects) can be auto-rendered using the special {.}
variable inside a\nloop. This variable will represent the value of the array at the current index:
var tpl = new Ext.XTemplate(\n '<p>{name}\\'s favorite beverages:</p>',\n '<tpl for=\"drinks\">',\n '<div> - {.}</div>',\n '</tpl>'\n);\ntpl.overwrite(panel.body, data);\n
\n\nWhen processing a sub-template, for example while looping through a child array, you can access the parent object's\nmembers via the parent object:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<tpl if=\"age > 1\">',\n '<p>{name}</p>',\n '<p>Dad: {parent.name}</p>',\n '</tpl>',\n '</tpl></p>'\n);\ntpl.overwrite(panel.body, data);\n
\n\nThe tpl tag and the if operator are used to provide conditional checks for deciding whether or not to render\nspecific parts of the template.
\n\nUsing the sample data above:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<tpl if=\"age > 1\">',\n '<p>{name}</p>',\n '</tpl>',\n '</tpl></p>'\n);\ntpl.overwrite(panel.body, data);\n
\n\nMore advanced conditionals are also supported:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<p>{name} is a ',\n '<tpl if=\"age >= 13\">',\n '<p>teenager</p>',\n '<tpl elseif=\"age >= 2\">',\n '<p>kid</p>',\n '<tpl else>',\n '<p>baby</p>',\n '</tpl>',\n '</tpl></p>'\n);\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<p>{name} is a ',\n '<tpl switch=\"name\">',\n '<tpl case=\"Aubrey\" case=\"Nikol\">',\n '<p>girl</p>',\n '<tpl default>',\n '<p>boy</p>',\n '</tpl>',\n '</tpl></p>'\n);\n
\n\nA break
is implied between each case and default, however, multiple cases can be listed\nin a single <tpl> tag.
Examples:
\n\nvar tpl = new Ext.XTemplate(\n \"<tpl if='age > 1 && age < 10'>Child</tpl>\",\n \"<tpl if='age >= 10 && age < 18'>Teenager</tpl>\",\n \"<tpl if='this.isGirl(name)'>...</tpl>\",\n '<tpl if=\"id == \\'download\\'\">...</tpl>',\n \"<tpl if='needsIcon'><img src='{icon}' class='{iconCls}'/></tpl>\",\n \"<tpl if='name == \\\"Don\\\"'>Hello</tpl>\"\n);\n
\n\nThe following basic math operators may be applied directly on numeric data values:
\n\n+ - * /\n
\n\nFor example:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<tpl if=\"age > 1\">', // <-- Note that the > is encoded\n '<p>{#}: {name}</p>', // <-- Auto-number each item\n '<p>In 5 Years: {age+5}</p>', // <-- Basic math\n '<p>Dad: {parent.name}</p>',\n '</tpl>',\n '</tpl></p>'\n);\ntpl.overwrite(panel.body, data);\n
\n\nAnything between {[ ... ]}
is considered code to be executed in the scope of the template.\nThe expression is evaluated and the result is included in the generated result. There are\nsome special variables available in that code:
push
to later\njoin
).This example demonstrates basic row striping using an inline code block and the xindex variable:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Company: {[values.company.toUpperCase() + \", \" + values.title]}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<div class=\"{[xindex % 2 === 0 ? \"even\" : \"odd\"]}\">',\n '{name}',\n '</div>',\n '</tpl></p>'\n );\n
\n\nAny code contained in \"verbatim\" blocks (using \"{% ... %}\") will be inserted directly in\nthe generated code for the template. These blocks are not included in the output. This\ncan be used for simple things like break/continue in a loop, or control structures or\nmethod calls (when they don't produce output). The this
references the template instance.
var tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Company: {[values.company.toUpperCase() + \", \" + values.title]}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '{% if (xindex % 2 === 0) continue; %}',\n '{name}',\n '{% if (xindex > 100) break; %}',\n '</div>',\n '</tpl></p>'\n );\n
\n\nOne or more member functions can be specified in a configuration object passed into the XTemplate constructor for\nmore complex processing:
\n\nvar tpl = new Ext.XTemplate(\n '<p>Name: {name}</p>',\n '<p>Kids: ',\n '<tpl for=\"kids\">',\n '<tpl if=\"this.isGirl(name)\">',\n '<p>Girl: {name} - {age}</p>',\n '<tpl else>',\n '<p>Boy: {name} - {age}</p>',\n '</tpl>',\n '<tpl if=\"this.isBaby(age)\">',\n '<p>{name} is a baby!</p>',\n '</tpl>',\n '</tpl></p>',\n {\n // XTemplate configuration:\n disableFormats: true,\n // member functions:\n isGirl: function(name){\n return name == 'Aubrey' || name == 'Nikol';\n },\n isBaby: function(age){\n return age < 1;\n }\n }\n);\ntpl.overwrite(panel.body, data);\n
\nOnly applies to Ext.Template, XTemplates are compiled automatically on the\nfirst call to apply or applyOut.
\nOnly applies to Ext.Template, XTemplates are compiled automatically on the\nfirst call to apply or applyOut.
\nOverrides: Ext.Template.compiled
Optional. A statement, or array of statements which set up var
s which may then\nbe accessed within the scope of the generated function.
true
in this class to identify an object as an instantiated Template, or subclass thereof.
Defaults to: true
Get the reference to the current class from which this object was instantiated. Unlike statics,\nthis.self
is scope-dependent and it's meant to be used for dynamic inheritance. See statics\nfor a detailed comparison
Ext.define('My.Cat', {\n statics: {\n speciesName: 'Cat' // My.Cat.speciesName = 'Cat'\n },\n\n constructor: function() {\n alert(this.self.speciesName); // dependent on 'this'\n },\n\n clone: function() {\n return new this.self();\n }\n});\n\n\nExt.define('My.SnowLeopard', {\n extend: 'My.Cat',\n statics: {\n speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'\n }\n});\n\nvar cat = new My.Cat(); // alerts 'Cat'\nvar snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard'\n\nvar clone = snowLeopard.clone();\nalert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'\n
\nApplies the supplied values
to the template and appends the new node(s) to the specified el
.
For example usage see Ext.Template class docs.
\nThe context element
\nThe template values. See applyTemplate for details.
\ntrue to return an Ext.Element.
\nThe new node or Element
\nReturns an HTML fragment of this template with the specified values applied.
\nThe template values. Can be an array if your params are numeric:
\n\n\n\n\nvar tpl = new Ext.Template('Name: {0}, Age: {1}');\ntpl.apply(['John', 25]);\n
\n\n\n\n\nor an object:
\n\n\n\n\nvar tpl = new Ext.Template('Name: {name}, Age: {age}');\ntpl.apply({name: 'John', age: 25});\n
\n\nThe HTML fragment
\n\nAlias for apply.
\n\nReturns an HTML fragment of this template with the specified values applied.
\nThe template values. Can be an array if your params are numeric:
\n\n\n\n\nvar tpl = new Ext.Template('Name: {0}, Age: {1}');\ntpl.apply(['John', 25]);\n
\n\n\n\n\nor an object:
\n\n\n\n\nvar tpl = new Ext.Template('Name: {name}, Age: {age}');\ntpl.apply({name: 'John', age: 25});\n
\n\nThe HTML fragment
\n\nCall the original method that was previously overridden with override
\n\nExt.define('My.Cat', {\n constructor: function() {\n alert(\"I'm a cat!\");\n }\n});\n\nMy.Cat.override({\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callOverridden();\n\n alert(\"Meeeeoooowwww\");\n }\n});\n\nvar kitty = new My.Cat(); // alerts \"I'm going to be a cat!\"\n // alerts \"I'm a cat!\"\n // alerts \"Meeeeoooowwww\"\n
\n This method has been deprecated
\nas of 4.1. Use callParent instead.
\n\nThe arguments, either an array or the arguments
object\nfrom the current method, for example: this.callOverridden(arguments)
Returns the result of calling the overridden method
\nCall the \"parent\" method of the current method. That is the method previously\noverridden by derivation or by an override (see Ext.define).
\n\n Ext.define('My.Base', {\n constructor: function (x) {\n this.x = x;\n },\n\n statics: {\n method: function (x) {\n return x;\n }\n }\n });\n\n Ext.define('My.Derived', {\n extend: 'My.Base',\n\n constructor: function () {\n this.callParent([21]);\n }\n });\n\n var obj = new My.Derived();\n\n alert(obj.x); // alerts 21\n
\n\nThis can be used with an override as follows:
\n\n Ext.define('My.DerivedOverride', {\n override: 'My.Derived',\n\n constructor: function (x) {\n this.callParent([x*2]); // calls original My.Derived constructor\n }\n });\n\n var obj = new My.Derived();\n\n alert(obj.x); // now alerts 42\n
\n\nThis also works with static methods.
\n\n Ext.define('My.Derived2', {\n extend: 'My.Base',\n\n statics: {\n method: function (x) {\n return this.callParent([x*2]); // calls My.Base.method\n }\n }\n });\n\n alert(My.Base.method(10); // alerts 10\n alert(My.Derived2.method(10); // alerts 20\n
\n\nLastly, it also works with overridden static methods.
\n\n Ext.define('My.Derived2Override', {\n override: 'My.Derived2',\n\n statics: {\n method: function (x) {\n return this.callParent([x*2]); // calls My.Derived2.method\n }\n }\n });\n\n alert(My.Derived2.method(10); // now alerts 40\n
\nThe arguments, either an array or the arguments
object\nfrom the current method, for example: this.callParent(arguments)
Returns the result of calling the parent method
\nDoes nothing. XTemplates are compiled automatically, so this function simply returns this.
\nthis
\nOverrides: Ext.Template.compile
Gets an XTemplate
from an object (an instance of an Ext.define'd class).\nMany times, templates are configured high in the class hierarchy and are to be\nshared by all classes that derive from that base. To further complicate matters,\nthese templates are seldom actual instances but are rather configurations. For\nexample:
Ext.define('MyApp.Class', {\n someTpl: [\n 'tpl text here'\n ]\n });\n
\n\nThe goal being to share that template definition with all instances and even\ninstances of derived classes, until someTpl
is overridden. This method will\n\"upgrade\" these configurations to be real XTemplate
instances in place (to\navoid creating one instance per object).
The object from which to get the XTemplate
(must be\nan instance of an Ext.define'd class).
The name of the property by which to get the XTemplate
.
The XTemplate
instance or null if not found.
Initialize configuration for this class. a typical example:
\n\nExt.define('My.awesome.Class', {\n // The default config\n config: {\n name: 'Awesome',\n isAwesome: true\n },\n\n constructor: function(config) {\n this.initConfig(config);\n }\n});\n\nvar awesome = new My.awesome.Class({\n name: 'Super Awesome'\n});\n\nalert(awesome.getName()); // 'Super Awesome'\n
\nthis
\nApplies the supplied values to the template and inserts the new node(s) after el.
\nThe context element
\nThe template values. See applyTemplate for details.
\ntrue to return a Ext.Element.
\nThe new node or Element
\nApplies the supplied values to the template and inserts the new node(s) before el.
\nThe context element
\nThe template values. See applyTemplate for details.
\ntrue to return a Ext.Element.
\nThe new node or Element
\nApplies the supplied values to the template and inserts the new node(s) as the first child of el.
\nThe context element
\nThe template values. See applyTemplate for details.
\ntrue to return a Ext.Element.
\nThe new node or Element
\nApplies the supplied values to the template and overwrites the content of el with the new node(s).
\nThe context element
\nThe template values. See applyTemplate for details.
\ntrue to return a Ext.Element.
\nThe new node or Element
\nGet the reference to the class from which this object was instantiated. Note that unlike self,\nthis.statics()
is scope-independent and it always returns the class from which it was called, regardless of what\nthis
points to during run-time
Ext.define('My.Cat', {\n statics: {\n totalCreated: 0,\n speciesName: 'Cat' // My.Cat.speciesName = 'Cat'\n },\n\n constructor: function() {\n var statics = this.statics();\n\n alert(statics.speciesName); // always equals to 'Cat' no matter what 'this' refers to\n // equivalent to: My.Cat.speciesName\n\n alert(this.self.speciesName); // dependent on 'this'\n\n statics.totalCreated++;\n },\n\n clone: function() {\n var cloned = new this.self; // dependent on 'this'\n\n cloned.groupName = this.statics().speciesName; // equivalent to: My.Cat.speciesName\n\n return cloned;\n }\n});\n\n\nExt.define('My.SnowLeopard', {\n extend: 'My.Cat',\n\n statics: {\n speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'\n },\n\n constructor: function() {\n this.callParent();\n }\n});\n\nvar cat = new My.Cat(); // alerts 'Cat', then alerts 'Cat'\n\nvar snowLeopard = new My.SnowLeopard(); // alerts 'Cat', then alerts 'Snow Leopard'\n\nvar clone = snowLeopard.clone();\nalert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'\nalert(clone.groupName); // alerts 'Cat'\n\nalert(My.Cat.totalCreated); // alerts 3\n
\nAdd methods / properties to the prototype of this class.
\n\nExt.define('My.awesome.Cat', {\n constructor: function() {\n ...\n }\n});\n\n My.awesome.Cat.addMembers({\n meow: function() {\n alert('Meowww...');\n }\n });\n\n var kitty = new My.awesome.Cat;\n kitty.meow();\n
\nAdd / override static properties of this class.
\n\nExt.define('My.cool.Class', {\n ...\n});\n\nMy.cool.Class.addStatics({\n someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue'\n method1: function() { ... }, // My.cool.Class.method1 = function() { ... };\n method2: function() { ... } // My.cool.Class.method2 = function() { ... };\n});\n
\nthis
\nBorrow another class' members to the prototype of this class.
\n\nExt.define('Bank', {\n money: '$$$',\n printMoney: function() {\n alert('$$$$$$$');\n }\n});\n\nExt.define('Thief', {\n ...\n});\n\nThief.borrow(Bank, ['money', 'printMoney']);\n\nvar steve = new Thief();\n\nalert(steve.money); // alerts '$$$'\nsteve.printMoney(); // alerts '$$$$$$$'\n
\nThe class to borrow members from
\nThe names of the members to borrow
\nthis
\nCreate a new instance of this Class.
\n\nExt.define('My.cool.Class', {\n ...\n});\n\nMy.cool.Class.create({\n someConfig: true\n});\n
\n\nAll parameters are passed to the constructor of the class.
\nthe created instance.
\nCreate aliases for existing prototype methods. Example:
\n\nExt.define('My.cool.Class', {\n method1: function() { ... },\n method2: function() { ... }\n});\n\nvar test = new My.cool.Class();\n\nMy.cool.Class.createAlias({\n method3: 'method1',\n method4: 'method2'\n});\n\ntest.method3(); // test.method1()\n\nMy.cool.Class.createAlias('method5', 'method3');\n\ntest.method5(); // test.method3() -> test.method1()\n
\nThe new method name, or an object to set multiple aliases. See\nflexSetter
\nThe original method name
\nCreates a template from the passed element's value (display:none textarea, preferred) or innerHTML.
\nThe created template
\nGet the current class' name in string format.
\n\nExt.define('My.cool.Class', {\n constructor: function() {\n alert(this.self.getName()); // alerts 'My.cool.Class'\n }\n});\n\nMy.cool.Class.getName(); // 'My.cool.Class'\n
\nclassName
\nAdds members to class.
\nThis method has been deprecated since 4.1
\nUse addMembers instead.
\n\nOverride members of this class. Overridden methods can be invoked via\ncallParent.
\n\nExt.define('My.Cat', {\n constructor: function() {\n alert(\"I'm a cat!\");\n }\n});\n\nMy.Cat.override({\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callParent(arguments);\n\n alert(\"Meeeeoooowwww\");\n }\n});\n\nvar kitty = new My.Cat(); // alerts \"I'm going to be a cat!\"\n // alerts \"I'm a cat!\"\n // alerts \"Meeeeoooowwww\"\n
\n\nAs of 4.1, direct use of this method is deprecated. Use Ext.define\ninstead:
\n\nExt.define('My.CatOverride', {\n override: 'My.Cat',\n constructor: function() {\n alert(\"I'm going to be a cat!\");\n\n this.callParent(arguments);\n\n alert(\"Meeeeoooowwww\");\n }\n});\n
\n\nThe above accomplishes the same result but can be managed by the Ext.Loader\nwhich can properly order the override and its target class and the build process\ncan determine whether the override is needed based on the required state of the\ntarget class (My.Cat).
\nThis method has been deprecated since 4.1.0
\nUse Ext.define instead
\n\nThe properties to add to this class. This should be\nspecified as an object literal containing one or more properties.
\nthis class
\n