Ext.data.JsonP.Ext_DomHelper({"alternateClassNames":["Ext.core.DomHelper"],"aliases":{},"enum":null,"parentMixins":[],"tagname":"class","subclasses":[],"extends":"Ext.dom.Helper","uses":[],"html":"
Alternate names
Ext.core.DomHelperHierarchy
Ext.BaseExt.dom.AbstractHelperExt.dom.HelperExt.DomHelperFiles
The DomHelper class provides a layer of abstraction from DOM and transparently supports creating elements via DOM or\nusing HTML fragments. It also has the ability to create HTML fragment templates from your DOM building code.
\n\nA specification object is used when creating elements. Attributes of this object are assumed to be element\nattributes, except for 4 special attributes:
\n\nNOTE: For other arbitrary attributes, the value will currently not be automatically HTML-escaped prior to\nbuilding the element's HTML string. This means that if your attribute value contains special characters that would\nnot normally be allowed in a double-quoted attribute value, you must manually HTML-encode it beforehand (see\nExt.String.htmlEncode) or risk malformed HTML being created. This behavior may change in a future release.
\n\nCommonly used insertion methods:
\n\n\n\n\nThis is an example, where an unordered list with 3 children items is appended to an existing element with\nid 'my-div':
\n\nvar dh = Ext.DomHelper; // create shorthand alias\n// specification object\nvar spec = {\n id: 'my-ul',\n tag: 'ul',\n cls: 'my-list',\n // append children after creating\n children: [ // may also specify 'cn' instead of 'children'\n {tag: 'li', id: 'item0', html: 'List Item 0'},\n {tag: 'li', id: 'item1', html: 'List Item 1'},\n {tag: 'li', id: 'item2', html: 'List Item 2'}\n ]\n};\nvar list = dh.append(\n 'my-div', // the context element 'my-div' can either be the id or the actual node\n spec // the specification object\n);\n
\n\nElement creation specification parameters in this class may also be passed as an Array of specification objects. This\ncan be used to insert multiple sibling nodes into an existing container very efficiently. For example, to add more\nlist items to the example above:
\n\ndh.append('my-ul', [\n {tag: 'li', id: 'item3', html: 'List Item 3'},\n {tag: 'li', id: 'item4', html: 'List Item 4'}\n]);\n
\n\nThe real power is in the built-in templating. Instead of creating or appending any elements, createTemplate\nreturns a Template object which can be used over and over to insert new elements. Revisiting the example above, we\ncould utilize templating this time:
\n\n// create the node\nvar list = dh.append('my-div', {tag: 'ul', cls: 'my-list'});\n// get template\nvar tpl = dh.createTemplate({tag: 'li', id: 'item{0}', html: 'List Item {0}'});\n\nfor(var i = 0; i < 5, i++){\n tpl.append(list, [i]); // use template to append to the actual node\n}\n
\n\nAn example using a template:
\n\nvar html = '<a id=\"{0}\" href=\"{1}\" class=\"nav\">{2}</a>';\n\nvar tpl = new Ext.DomHelper.createTemplate(html);\ntpl.append('blog-roll', ['link1', 'http://www.edspencer.net/', \"Ed's Site\"]);\ntpl.append('blog-roll', ['link2', 'http://www.dustindiaz.com/', \"Dustin's Site\"]);\n
\n\nThe same example using named parameters:
\n\nvar html = '<a id=\"{id}\" href=\"{url}\" class=\"nav\">{text}</a>';\n\nvar tpl = new Ext.DomHelper.createTemplate(html);\ntpl.append('blog-roll', {\n id: 'link1',\n url: 'http://www.edspencer.net/',\n text: \"Ed's Site\"\n});\ntpl.append('blog-roll', {\n id: 'link2',\n url: 'http://www.dustindiaz.com/',\n text: \"Dustin's Site\"\n});\n
\n\nTemplates are applied using regular expressions. The performance is great, but if you are adding a bunch of DOM\nelements using the same template, you can increase performance even further by "compiling" the template. The way \"compile()\" works is the template is parsed and\nbroken up at the different variable points and a dynamic function is created and eval'ed. The generated function\nperforms string concatenation of these parts and the passed variables instead of using regular expressions.
\n\nvar html = '<a id=\"{id}\" href=\"{url}\" class=\"nav\">{text}</a>';\n\nvar tpl = new Ext.DomHelper.createTemplate(html);\ntpl.compile();\n\n//... use template like normal\n
\n\nDomHelper will transparently create HTML fragments when it can. Using HTML fragments instead of DOM can significantly\nboost performance.
\n\nElement creation specification parameters may also be strings. If useDom is false, then the string is used\nas innerHTML. If useDom is true, a string specification results in the creation of a text node. Usage:
\n\nExt.DomHelper.useDom = true; // force it to use DOM; reduces performance\n
\nSince cls & for are reserved words, we need to transform them
\nDefaults to: {cls: 'class', htmlFor: 'for'}
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
\nCreates new DOM element(s) and appends them to el.
\nThe context element
\nThe DOM object spec (and children) or raw HTML blob
\ntrue to return a Ext.Element
\nThe new node
\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
\n\nTo override a method and replace it and also call the superclass method, use\ncallSuper. This is often done to patch a method to fix a bug.
\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
\nThis method is used by an override to call the superclass method but bypass any\noverridden method. This is often done to \"patch\" a method that contains a bug\nbut for whatever reason cannot be fixed directly.
\n\nConsider:
\n\n Ext.define('Ext.some.Class', {\n method: function () {\n console.log('Good');\n }\n });\n\n Ext.define('Ext.some.DerivedClass', {\n method: function () {\n console.log('Bad');\n\n // ... logic but with a bug ...\n\n this.callParent();\n }\n });\n
\n\nTo patch the bug in DerivedClass.method
, the typical solution is to create an\noverride:
Ext.define('App.paches.DerivedClass', {\n override: 'Ext.some.DerivedClass',\n\n method: function () {\n console.log('Fixed');\n\n // ... logic but with bug fixed ...\n\n this.callSuper();\n }\n });\n
\n\nThe patch method cannot use callParent
to call the superclass method
since\nthat would call the overridden method containing the bug. In other words, the\nabove patch would only produce \"Fixed\" then \"Good\" in the console log, whereas,\nusing callParent
would produce \"Fixed\" then \"Bad\" then \"Good\".
The arguments, either an array or the arguments
object\nfrom the current method, for example: this.callSuper(arguments)
Returns the result of calling the superclass method
\nCreates a new Ext.Template from the DOM object spec.
\nThe DOM object spec (and children)
\nThe new template
\nConverts the styles from the given object to text. The styles are CSS style names\nwith their associated value.
\n\nThe basic form of this method returns a string:
\n\n var s = Ext.DomHelper.generateStyles({\n backgroundColor: 'red'\n });\n\n // s = 'background-color:red;'\n
\n\nAlternatively, this method can append to an output array.
\n\n var buf = [];\n\n ...\n\n Ext.DomHelper.generateStyles({\n backgroundColor: 'red'\n }, buf);\n
\n\nIn this case, the style text is pushed on to the array and the array is returned.
\nInitialize 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
\nCreates new DOM element(s) and inserts them after el.
\nThe context element
\nThe DOM object spec (and children)
\ntrue to return a Ext.Element
\nThe new node
\nCreates new DOM element(s) and inserts them before el.
\nThe context element
\nThe DOM object spec (and children) or raw HTML blob
\ntrue to return a Ext.Element
\nThe new node
\nCreates new DOM element(s) and inserts them as the first child of el.
\nThe context element
\nThe DOM object spec (and children) or raw HTML blob
\ntrue to return a Ext.Element
\nThe new node
\nInserts an HTML fragment into the DOM.
\nWhere to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
\n\nFor example take the following HTML: <div>Contents</div>
Using different where
values inserts element to the following places:
<HERE><div>Contents</div>
<div><HERE>Contents</div>
<div>Contents<HERE></div>
<div>Contents</div><HERE>
The context element
\nThe HTML fragment
\nThe new node
\nCreates new DOM element(s) and overwrites the contents of el with them.
\nThe context element
\nThe DOM object spec (and children) or raw HTML blob
\ntrue to return an Ext.Element
\nThe new node
\nOverrides: Ext.dom.AbstractHelper.overwrite
Get 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
\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