Hierarchy
Ext.BaseExt.data.amf.EncoderFiles
This class serializes data in the Action Message Format (AMF) format. It can write simple and complex objects, to be used in conjunction with an AMF-compliant server. To encode a byte array, first construct an Encoder, optionally setting the format:
var encoder = Ext.create('Ext.data.amf.Encoder', {
format: 3
});
Then use the writer methods to output data:
encoder.writeObject(1);
And access the data through the bytes property: encoder.getBytes();
You can also reset the class to start a new byte array:
encoder.clear();
Current limitations: AMF3 format (format:3) - writeObject will write out XML object, not legacy XMLDocument objects. A writeXmlDocument method is provided for explicitly writing XMLDocument objects. - Each object is written out explicitly, not using the reference tables supported by the AMF format. This means the function does NOT support circular reference objects. - Array objects: only the numbered indices and data will be written out. Associative values will be ignored. - Objects that aren't Arrays, Dates, Strings, Document (XML) or primitive values will be written out as anonymous objects with dynamic data. - There's no JavaScript equivalent to the ByteArray type in ActionScript, hence data will never be searialized as ByteArrays by the writeObject function. A writeByteArray method is provided for writing out ByteArray objects.
AMF0 format (format:0) - Each object is written out explicitly, not using the reference tables supported by the AMF format. This means the function does NOT support circular reference objects. - Array objects: the function always writes an associative array (following the behavior of flex). - Objects that aren't Arrays, Dates, Strings, Document (XML) or primitive values will be written out as anonymous objects.
For more information on working with AMF data please refer to the AMF Guide.
Get the reference to the current class from which this object was instantiated. Unlike statics,
this.self
is scope-dependent and it's meant to be used for dynamic inheritance. See statics
for a detailed comparison
Ext.define('My.Cat', {
statics: {
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
alert(this.self.speciesName); // dependent on 'this'
},
clone: function() {
return new this.self();
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
}
});
var cat = new My.Cat(); // alerts 'Cat'
var snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard'
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
Sets the functions that will correctly serialize for the relevant protocol version.
the protocol version to support
Call the original method that was previously overridden with override,
This method is deprecated as callParent does the same thing.
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callOverridden();
alert("Meeeeoooowwww");
return instance;
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
// alerts "I'm a cat!"
// alerts "Meeeeoooowwww"
The arguments, either an array or the arguments
object
from the current method, for example: this.callOverridden(arguments)
Returns the result of calling the overridden method
Call the "parent" method of the current method. That is the method previously overridden by derivation or by an override (see Ext.define).
Ext.define('My.Base', {
constructor: function (x) {
this.x = x;
},
statics: {
method: function (x) {
return x;
}
}
});
Ext.define('My.Derived', {
extend: 'My.Base',
constructor: function () {
this.callParent([21]);
}
});
var obj = new My.Derived();
alert(obj.x); // alerts 21
This can be used with an override as follows:
Ext.define('My.DerivedOverride', {
override: 'My.Derived',
constructor: function (x) {
this.callParent([x*2]); // calls original My.Derived constructor
}
});
var obj = new My.Derived();
alert(obj.x); // now alerts 42
This also works with static methods.
Ext.define('My.Derived2', {
extend: 'My.Base',
statics: {
method: function (x) {
return this.callParent([x*2]); // calls My.Base.method
}
}
});
alert(My.Base.method(10)); // alerts 10
alert(My.Derived2.method(10)); // alerts 20
Lastly, it also works with overridden static methods.
Ext.define('My.Derived2Override', {
override: 'My.Derived2',
statics: {
method: function (x) {
return this.callParent([x*2]); // calls My.Derived2.method
}
}
});
alert(My.Derived2.method(10)); // now alerts 40
To override a method and replace it and also call the superclass method, use callSuper. This is often done to patch a method to fix a bug.
The arguments, either an array or the arguments
object
from the current method, for example: this.callParent(arguments)
Returns the result of calling the parent method
This method is used by an override to call the superclass method but bypass any overridden method. This is often done to "patch" a method that contains a bug but for whatever reason cannot be fixed directly.
Consider:
Ext.define('Ext.some.Class', {
method: function () {
console.log('Good');
}
});
Ext.define('Ext.some.DerivedClass', {
method: function () {
console.log('Bad');
// ... logic but with a bug ...
this.callParent();
}
});
To patch the bug in DerivedClass.method
, the typical solution is to create an
override:
Ext.define('App.paches.DerivedClass', {
override: 'Ext.some.DerivedClass',
method: function () {
console.log('Fixed');
// ... logic but with bug fixed ...
this.callSuper();
}
});
The patch method cannot use callParent
to call the superclass method
since
that would call the overridden method containing the bug. In other words, the
above patch would only produce "Fixed" then "Good" in the console log, whereas,
using callParent
would produce "Fixed" then "Bad" then "Good".
The arguments, either an array or the arguments
object
from the current method, for example: this.callSuper(arguments)
Returns the result of calling the superclass method
Reset all class states and starts a new empty array for encoding data. The method generates a new array for encoding, so it's safe to keep a reference to the old one.
Encodes a U29 int, returning a byte array with the encoded number.
Initialize configuration for this class. a typical example:
Ext.define('My.awesome.Class', {
// The default config
config: {
name: 'Awesome',
isAwesome: true
},
constructor: function(config) {
this.initConfig(config);
}
});
var awesome = new My.awesome.Class({
name: 'Super Awesome'
});
alert(awesome.getName()); // 'Super Awesome'
mixins The mixin prototypes as key - value pairs
Get the reference to the class from which this object was instantiated. Note that unlike self,
this.statics()
is scope-independent and it always returns the class from which it was called, regardless of what
this
points to during run-time
Ext.define('My.Cat', {
statics: {
totalCreated: 0,
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
var statics = this.statics();
alert(statics.speciesName); // always equals to 'Cat' no matter what 'this' refers to
// equivalent to: My.Cat.speciesName
alert(this.self.speciesName); // dependent on 'this'
statics.totalCreated++;
},
clone: function() {
var cloned = new this.self(); // dependent on 'this'
cloned.groupName = this.statics().speciesName; // equivalent to: My.Cat.speciesName
return cloned;
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
},
constructor: function() {
this.callParent();
}
});
var cat = new My.Cat(); // alerts 'Cat', then alerts 'Cat'
var snowLeopard = new My.SnowLeopard(); // alerts 'Cat', then alerts 'Snow Leopard'
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
alert(clone.groupName); // alerts 'Cat'
alert(My.Cat.totalCreated); // alerts 3
Writes the appropriate AMF0 boolean value to the byte array.
The value to write
Write an object to the byte array in AMF0 format. Since we don't have the class information form Flex, the object is written as an anonymous object.
the object to serialize.
Writes the AMF0 null value to the byte array.
Writes a numberic value to the byte array in AMF0 format
A native numeric value, Number instance or one of Infinity, -Infinity or NaN
Writes a short UTF8 string preceded with a 16-bit length.
the string to write
Writes a strict-array in AMF0 format. Unordered parts are ignored (e.g. a["hello"] will not be encoded). This function is included for completeness and will never be called by writeObject.
the array to serialize.
Writes the AMF0 undefined value to the byte array.
Writes an XMLDocument in AMF0 format.
XML document (type Document typically) to write
Writes an array in AMF3 format. Only the ordered part of the array use handled. Unordered parts are ignored (e.g. a["hello"] will not be encoded).
the array to serialize.
Writes the appropriate AMF3 boolean value to the byte array.
The value to write
Write a byte array in AMF3 format. This function is never called directly by writeObject since there's no way to distinguish a regular array from a byte array.
the object to serialize.
Write an object to the byte array in AMF3 format. Since we don't have the class information form Flex, the object is written as an anonymous object.
the object to serialize.
Writes the AMF3 null value to the byte array.
Writes a numberic value to the byte array in AMF3 format
A native numeric value, Number instance or one of Infinity, -Infinity or NaN
Writes the AMF3 undefined value to the byte array.
Writes an XML object (ActionScript 3 new XML object) in AMF3 format.
XML document (type Document typically) to write
Writes an Legacy XMLDocument (ActionScript Legacy XML object) in AMF3 format. Must be called explicitly. The writeObject method will call writeXml and not writeXmlDocument.
XML document (type Document typically) to write
Write an AMF header to the byte array. AMF headers are always encoded in AMF0.
the header name
true if the receiver must understand this header or else reject it, false otherwise
the value to serialize. Must be an object that can be serialized by AMF
Writes an AMF packet to the byte array
the headers to serialize. Each item in the array should be an object with three fields: name, mustUnderstand, value
the messages to serialize. Each item in the array should be an object with three fields: targetUri, responseUri, body
Write the appropriate data items to the byte array. Supported types: - undefined - null - boolean - integer (if AMF3 - limited by 29-bit int, otherwise passed as double) - double - UTF-8 string - XML Document (identified by being instaneof Document. Can be generated with: new DOMParser()).parseFromString(xml, "text/xml");
A primitive or object to write to the stream
Add methods / properties to the prototype of this class.
Ext.define('My.awesome.Cat', {
constructor: function() {
// ...
}
});
My.awesome.Cat.addMembers({
meow: function() {
alert('Meowww...');
}
});
var kitty = new My.awesome.Cat();
kitty.meow();
Add / override static properties of this class.
Ext.define('My.cool.Class', {
// this.se
});
My.cool.Class.addStatics({
someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue'
method1: function() { }, // My.cool.Class.method1 = function() { ... };
method2: function() { } // My.cool.Class.method2 = function() { ... };
});
this
Borrow another class' members to the prototype of this class.
Ext.define('Bank', {
money: '$$$',
printMoney: function() {
alert('$$$$$$$');
}
});
Ext.define('Thief', {
// ...
});
Thief.borrow(Bank, ['money', 'printMoney']);
var steve = new Thief();
alert(steve.money); // alerts '$$$'
steve.printMoney(); // alerts '$$$$$$$'
The class to borrow members from
The names of the members to borrow
this
Create a new instance of this Class.
Ext.define('My.cool.Class', {
// ...
});
My.cool.Class.create({
someConfig: true
});
All parameters are passed to the constructor of the class.
the created instance.
Create aliases for existing prototype methods. Example:
Ext.define('My.cool.Class', {
method1: function() { },
method2: function() { }
});
var test = new My.cool.Class();
My.cool.Class.createAlias({
method3: 'method1',
method4: 'method2'
});
test.method3(); // test.method1()
My.cool.Class.createAlias('method5', 'method3');
test.method5(); // test.method3() -> test.method1()
The new method name, or an object to set multiple aliases. See flexSetter
The original method name
Get the current class' name in string format.
Ext.define('My.cool.Class', {
constructor: function() {
alert(this.self.getName()); // alerts 'My.cool.Class'
}
});
My.cool.Class.getName(); // 'My.cool.Class'
className
Override members of this class. Overridden methods can be invoked via callParent.
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callParent(arguments);
alert("Meeeeoooowwww");
return instance;
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
// alerts "I'm a cat!"
// alerts "Meeeeoooowwww"
As of 2.1, direct use of this method is deprecated. Use Ext.define instead:
Ext.define('My.CatOverride', {
override: 'My.Cat',
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callParent(arguments);
alert("Meeeeoooowwww");
return instance;
}
});
The above accomplishes the same result but can be managed by the Ext.Loader which can properly order the override and its target class and the build process can determine whether the override is needed based on the required state of the target class (My.Cat).
This method has been deprecated since 2.1.0
Please use Ext.define instead
The properties to add to this class. This should be specified as an object literal containing one or more properties.
this class