ExtReact Docs Help

Introduction

The documentation for the ExtReact product diverges somewhat from the documentation of other Sencha products. The sections below describe documentation for all products except where indicated as unique to ExtReact.

Terms, Icons, and Labels

Many classes have shortcut names used when creating (instantiating) a class with a configuration object. The shortcut name is referred to as an alias (or xtype if the class extends Ext.Component). The alias/xtype is listed next to the class name of applicable classes for quick reference.

ExtReact component classes list the configurable name prominently at the top of the API class doc followed by the fully-qualified class name.

Access Levels

Framework classes or their members may be specified as private or protected. Else, the class / member is public. Public, protected, and private are access descriptors used to convey how and when the class or class member should be used.

Member Types

Member Syntax

Below is an example class member that we can disect to show the syntax of a class member (the lookupComponent method as viewed from the Ext.button.Button class in this case).

lookupComponent ( item ) : Ext.Component
protected

Called when a raw config object is added to this container either during initialization of the items config, or when new items are added), or {@link #insert inserted.

This method converts the passed object into an instanced child component.

This may be overridden in subclasses when special processing needs to be applied to child creation.

Parameters

item :  Object

The config object being added.

Returns
Ext.Component

The component to be added.

Let's look at each part of the member row:

Member Flags

The API documentation uses a number of flags to further commnicate the class member's function and intent. The label may be represented by a text label, an abbreviation, or an icon.

Class Icons

- Indicates a framework class

- A singleton framework class. *See the singleton flag for more information

- A component-type framework class (any class within the Ext JS framework that extends Ext.Component)

- Indicates that the class, member, or guide is new in the currently viewed version

Member Icons

- Indicates a class member of type config

Or in the case of an ExtReact component class this indicates a member of type prop

- Indicates a class member of type property

- Indicates a class member of type method

- Indicates a class member of type event

- Indicates a class member of type theme variable

- Indicates a class member of type theme mixin

- Indicates that the class, member, or guide is new in the currently viewed version

Class Member Quick-Nav Menu

Just below the class name on an API doc page is a row of buttons corresponding to the types of members owned by the current class. Each button shows a count of members by type (this count is updated as filters are applied). Clicking the button will navigate you to that member section. Hovering over the member-type button will reveal a popup menu of all members of that type for quick navigation.

Getter and Setter Methods

Getting and setter methods that correlate to a class config option will show up in the methods section as well as in the configs section of both the API doc and the member-type menus just beneath the config they work with. The getter and setter method documentation will be found in the config row for easy reference.

ExtReact component classes do not hoist the getter / setter methods into the prop. All methods will be described in the Methods section

History Bar

Your page history is kept in localstorage and displayed (using the available real estate) just below the top title bar. By default, the only search results shown are the pages matching the product / version you're currently viewing. You can expand what is displayed by clicking on the button on the right-hand side of the history bar and choosing the "All" radio option. This will show all recent pages in the history bar for all products / versions.

Within the history config menu you will also see a listing of your recent page visits. The results are filtered by the "Current Product / Version" and "All" radio options. Clicking on the button will clear the history bar as well as the history kept in local storage.

If "All" is selected in the history config menu the checkbox option for "Show product details in the history bar" will be enabled. When checked, the product/version for each historic page will show alongside the page name in the history bar. Hovering the cursor over the page names in the history bar will also show the product/version as a tooltip.

Search and Filters

Both API docs and guides can be searched for using the search field at the top of the page.

On API doc pages there is also a filter input field that filters the member rows using the filter string. In addition to filtering by string you can filter the class members by access level, inheritance, and read only. This is done using the checkboxes at the top of the page.

The checkbox at the bottom of the API class navigation tree filters the class list to include or exclude private classes.

Clicking on an empty search field will show your last 10 searches for quick navigation.

API Doc Class Metadata

Each API doc page (with the exception of Javascript primitives pages) has a menu view of metadata relating to that class. This metadata view will have one or more of the following:

Expanding and Collapsing Examples and Class Members

Runnable examples (Fiddles) are expanded on a page by default. You can collapse and expand example code blocks individually using the arrow on the top-left of the code block. You can also toggle the collapse state of all examples using the toggle button on the top-right of the page. The toggle-all state will be remembered between page loads.

Class members are collapsed on a page by default. You can expand and collapse members using the arrow icon on the left of the member row or globally using the expand / collapse all toggle button top-right.

Desktop -vs- Mobile View

Viewing the docs on narrower screens or browsers will result in a view optimized for a smaller form factor. The primary differences between the desktop and "mobile" view are:

Viewing the Class Source

The class source can be viewed by clicking on the class name at the top of an API doc page. The source for class members can be viewed by clicking on the "view source" link on the right-hand side of the member row.

ExtReact 6.7.0


top

Ext.data.field.Field alias: data.field.auto

NPM Package

@sencha/ext-react

Hierarchy

Ext.Base
Ext.data.field.Field

Summary

Fields are used to define the members of a Model. They aren't instantiated directly; instead, when we create a class that extends Ext.data.Model, it automatically creates Field instances for each field configured in a Ext.data.Model. For example, we might set up a model like this:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        'name', 'email',
        { name: 'age', type: 'int' },
        { name: 'gender', type: 'string', defaultValue: 'Unknown' }
    ]
});

Four fields will have been created for the User Model - name, email, age and gender. Note that we specified a couple of different formats here; if we only pass in the string name of the field (as with name and email), the field is set up with the 'auto' type. It's as if we'd done this instead:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'name', type: 'auto' },
        { name: 'email', type: 'auto' },
        { name: 'age', type: 'int' },
        { name: 'gender', type: 'string', defaultValue: 'Unknown' }
    ]
});

Field Types

Fields come in various types. When declaring a field, the type property is used to specify the type of Field derived class used to manage values.

The predefined set of types are:

Conversion

When reading fields it is often necessary to convert the values received before using them or storing them in records. To handle these cases there is the convert method. This method is passed the received value (as well as the current record instance, but see below) and it returns the value to carry forward.

For auto fields there is no convert method. This is for efficiency. For other field types, there are often convert methods. You can provide a convert config when the field is defined like this:

 {
     name: 'timestamp',

     convert: function (value) {
         return new Date(value);
     }
 }

While this can be convenient, see below for details on defining Custom Types as that is often a better practice and avoids repeating these functions.

Note that when a defaultValue is specified, it will also be passed through to convert (either to the convert method or to the convert config).

Calculated Values

In some cases fields are the result of a calculation from other fields. Historically this was a second role for convert but that has some short comings. The simpler solution is the calculate config.

Values produced by calculate and convert are stored in the record as with any other field. In fact, if we define a calculated "firstName" field and log out all of the data, we'll see this:

var ed = Ext.create('User', { name: 'Ed Spencer' });

console.log(ed.data);

//outputs this:
{
    age: 0,
    email: "",
    firstName: "Ed",  // calculated field
    gender: "Unknown",
    name: "Ed Spencer"
}

Using calculate

 {
     name: 'firstName',

     calculate: function (data) {
         return data.name.split(' ')[0];
     }
 }

Using calculate is the simplest and safest way to define a calculated field. The most important part of this is that, internally, the code of the supplied function is parsed to extract its dependencies. In this case, the "name" field is the only dependency. This means that "firstName" will only need to be recalculated when "name" is modified.

Note: Fields used by the calculate method must be explicitly defined in the fields of the model.

Using convert

Following is the equivalent technique using convert

 {
     name: 'firstName',

     convert: function (value, record) {
         return record.get('name').split(' ')[0];
     },

     depends: [ 'name' ]
 }

When a convert function accepts a 2nd argument (a reference to the record), it is considered a calculated field. If a depends config is not provided then this field's dependencies are unknown. In this case, the depends are provided as would be automatically determined with the calculate config.

Updating

Fields modified with the set method will have their stored value set using the convert / calculate method when present.

For example:

Ext.define('MyApp.model.Employee', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'salary',
        convert: function (val) {
            var startingBonus = val * .1;
            return val + startingBonus;
        }
    }],
    convertOnSet: false
});

var tina = Ext.create('MyApp.model.Employee', {
    salary: 50000
});

console.log(tina.get('salary')); // logs 55000

tina.set('salary', 60000);
console.log(tina.get('salary')); // logs 60000

This default behavior can be disabled by setting the Model's Ext.data.Model#cfg-convertOnSet config to false.

Note: convertOnSet false only prevents the convert / calculate call when the set fieldName param matches the field's name. See convertOnSet for additional details.

Dependencies

When a field's convert method processes values from the record (vs. just the field's value), it is best to also provide a depends config as shown above. Fields that provide a calculate method must follow the proper form for using fields so that dependencies can be extracted.

Calculated fields are processed after other fields based on their dependencies. Fields with convert methods that use the provided record that do not specify a depends config are processed as a group after all other fields since such converters can rely on anything in the record. The order of processing these fields with respect to each other is unspecified and should not be relied upon.

Serialization

To handle the inverse scenario of convert there is the serialize method. This method is called to produce the value to send to a server based on the internal value as would be returned from convert. In most cases, these methods should "round trip" a value:

 assertEqual(value, field.serialize(field.convert(value)));

By default, only Ext.data.field.Date fields have a serialize method. Other types simply send their value unmodified.

Custom Types

Developers may create their own application-specific data types by deriving from this class. This is typically much better than applying multiple configuration values on field instances as these often become repetitive.

To illustrate, we define a "time" field type that stores a time-of-day represented as a number of minutes since Midnight.

 Ext.define('App.field.Time', {
     extend: 'Ext.data.field.Field',

     alias: 'data.field.time',

     timeFormat: 'g:i',

     convert: function (value) {
         if (value && Ext.isString(value)) {
             var date = Ext.Date.parse(value, this.timeFormat);
             if (!date) {
                 return null;
             }
             return (date.getHours() - 1) * 60 + date.getMinutes();
         }
         return value;
     }
 });

Validation

Custom field types can override the validate method or provide a set of validators.

 Ext.define('App.field.PhoneNumber', {
     extend: 'Ext.data.field.Field',

     alias: 'data.field.phonenumber',

     // Match U.S. phone numbers for example purposes
     validators: {
         type: 'format',
         matcher: /\d{3}\-\d{3}\-\d{4}/
     }
 });

Once the class is defined, fields can be declared using the new type (based on its alias) like so:

 Ext.define('App.model.PhoneCall', {
     fields: [
         { name: 'startTime', type: 'time' },
         { name: 'phoneNumber', type: 'phonenumber' }
     ]
 });
No members found using the current filters

configs

Optional Configs

allowNull : Boolean

Use when converting received data into a Ext.data.field.Integer, Ext.data.field.Number, Ext.data.field.Boolean or Ext.data.field.String type. If the value cannot be parsed, null will be used if allowNull is true, otherwise a default value for that type will be used:

  • for int and float - 0.
  • for string - "".
  • for bool - false.

Note that when parsing of Ext.data.field.Date type fails, the value will be null regardless of this setting.

Defaults to:

false

getAllowNull Boolean

Gets allowNull for this field. See allowNull.

Returns

:Boolean

allowNull

calculate : Function

This config defines a simple field calculation function. A calculate method only has access to the record data and should return the value of the calculated field. When provided in this way, the depends config is automatically determined by parsing the calculate function. For example:

 fields: [{
     name: 'firstName',
     type: 'string'
 },{
     name: 'lastName',
     type: 'string'
 },{
     name: 'fullName',
     calculate: function (data) {
         return data.firstName + ' ' + data.lastName;
     }
 }]

The above 'fullName' field is equivalent to:

 {
     name: 'fullName',
     convert: function (v, rec) {
         return rec.get('firstName') + ' ' + rec.get('lastName');
     },
     depends: ['firstName', 'lastName']
 }

The restrictions on form for a calculate method are that the accesses to field values must match the following regular expression (case insensitive):

 data.([a-z_][a-z0-9_]*)
 // where 'data' is the param passed to the calculate method

The only advantage of a calculate method over a convert method is automatic determination of depends.

Note: The use of calculate and method-convert are exclusive. The calculate method will override the convert method if both are configured.

Note: Fields used by the calculate method must be explicitly defined in the fields of the model.

Parameters

data :  Object

An object with all values for each field in the parent model. See getData.

Returns

:Mixed

value The value of the calculated field

convert : Function

If specified this config overrides the convert method. See also calculate for simple field calculations.

Note: The use of calculate and convert are exclusive. The calculate method will override the convert method if both are configured.

getConvert Function

Gets converter for this field. See method-convert.

Returns

:Function

convert

critical : Boolean

A critical field is a field that must always be sent to the server even if it has not changed. The most common example of such a field is the "id" of a record (see Ext.data.Model#idProperty but the Ext.data.Model#versionProperty is similarly a critical field.

Defaults to:

false

defaultValue : Object

The default value used when the creating an instance from a raw data object, and the property referenced by the mapping does not exist in that data object.

The value undefined prevents defaulting in a value.

Defaults to:

undefined

getDefaultValue Object

Gets the defaultValue for this field. See defaultValue.

Returns

:Object

defaultValue

depends : String / String[]

The field name or names within the Ext.data.Model on which the value of this field depends, and from which a new value may be calculated. These values are the values used by the convert method. If you do not have a convert method then this config should not be specified.

Before using this config you should consider if using a calculate method instead of a convert method would be simpler.

Whenever any of the named fields are set using the set method, this fields will have its convert method called passing the Ext.data.Model so that the dependent value can be calculated from all fields which it needs.

For example, to display a person's full name, using two separate firstName and lastName fields, configure the name field like this:

{
    name: 'name',

    // Will be called whenever forename or surname fields are set
    convert: function (v, rec) {
        return rec.get('firstName') + ' ' + rec.get('lastName');
    },

    depends: [ 'firstName', 'lastName' ],

    // It should not be returned to the server - it's not a database field
    persist: false
}

Note that if you do not want the calculated field to be part of the field set sent back to the server when the store is synchronized, you should configure the field with persist set to false.

getDepends String[]

Gets the depends for this field. See depends.

Returns

:String[]

depends

mapping : String / Number / Function

(Optional) A path expression for use by the Ext.data.reader.Reader implementation that is creating the Ext.data.Model to extract the Field value from the data object. If the path expression is the same as the field name, the mapping may be omitted. A function may be passed to do complex data extraction. The examples below are simple just to demonstrate the capability, typically, a function would not be used to extract such simple data.

The form of the mapping expression depends on the Reader being used.

  • Ext.data.reader.Json

    The mapping is a string containing the javascript expression to reference the data from an element of the data item's rootProperty Array. Defaults to the field name. If a function is passed, a single argument is received which contains the raw json object:

    // Server returns [{"name": "Foo", "age": 1}, {"name": "Bar", "age": 2}]
    mapping: function(data) {
        return data.name;
    }
    
  • Ext.data.reader.Xml

    The mapping is an Ext.DomQuery path to the data item relative to the DOM element that represents the record. Defaults to the field name. If a function is passed, a single argument is received which contains the record node:

    // Server returns <Root><Person><Name>Foo</Name><Age>1</Age></Person><Person><Name>Bar</Name><Age>2</Age></Person></Root>
    mapping: function(data) {
        return data.firstChild.textContent;
    }
    
  • Ext.data.reader.Array

    The mapping is a number indicating the Array index of the field's value. Defaults to the field specification's Array position. If a function is passed, a single argument is received which contains the child array.

    // Server returns [["Foo", 1], ["Bar", 2]]
    mapping: function(data) {
        return data[0];
    }
    

If a more complex value extraction strategy is required, then configure the Field with a cfg-convert function. This is passed the whole row object, and may interrogate it in whatever way is necessary in order to return the desired data.

getMapping Object

Get the mapping for this field. See mapping.

Returns

:Object

mapping

name : String

The name by which the field is referenced within the Model. This is referenced by, for example, the dataIndex property in column definition objects passed to Ext.grid.property.HeaderContainer.

Note: In the simplest case, if no properties other than name are required, a field definition may consist of just a String for the field name.

getName String

Gets the name for this field. See name.

Returns

:String

name

persist : Boolean

False to exclude this field from the Ext.data.Model#modified fields in a record. This will also exclude the field from being written using a Ext.data.writer.Writer. This option is useful when fields are used to keep state on the client but do not need to be persisted to the server.

Defaults to false for calculated fields and true otherwise.

getPersist Boolean

Gets the persist for this field. See persist.

Returns

:Boolean

persist

reference : String / Object

The name of the entity referenced by this field. In most databases, this relationship is represented by a "foreign key". That is, a value for such a field matches the value of the id for an entity of this type.

For further documentation, see Ext.data.schema.Reference.

sortType : Function / String

A function which converts a Field's value to a comparable value in order to ensure correct sort ordering.

Predefined functions are provided in Ext.data.SortTypes. A custom sort example:

// current sort     after sort we want
// +-+------+          +-+------+
// |1|First |          |1|First |
// |2|Last  |          |3|Second|
// |3|Second|          |2|Last  |
// +-+------+          +-+------+

sortType: function(value) {
   switch (value.toLowerCase()) // native toLowerCase():
   {
      case 'first': return 1;
      case 'second': return 2;
      default: return 3;
   }
}

May also be set to a String value, corresponding to one of the named sort types in Ext.data.SortTypes.

getSortType Function

Gets the sortType for this field. See sortType.

Returns

:Function

sortType

summary : String / Object / Function

The summary type for this field. This is used to calculate a summary value by the Ext.data.Model.

  • If a string, it should be an alias for one of the Ext.data.summary types.
  • If an object, a config for one of the Ext.data.summary types.
  • If a function, it should match the signature for calculate.

Available since: 6.5.0

getSummary Ext.data.summary.Base

Gets the summary for this field. See summary.

Returns

:Ext.data.summary.Base

The summary.

summaryField : String

A field to use as the basis for calculating a summary. This is used in conjunction with the virtual summary fields. See summary.

Defaults to:

""

Available since: 6.5.0

unique : Boolean

true if the value of this field is unique amongst all instances. When used with a reference this describes a "one-to-one" relationship. It is almost always the case that a unique field cannot also be nullable.

Defaults to:

false

validators : Object[]

An array of Ext.data.validator.Validator for this field. These validators will only be passed a field value to validate.

properties

Instance Properties

defaultInvalidMessage : String

The default message to present for an invalid field.

Defaults to:

"This field is invalid"

Available since: 5.0.0

definedBy : Ext.Class

The class (derived from Ext.data.Model) that defined this field.

 Ext.define('MyApp.models.Foo', {
     extend: 'Ext.data.Model',

     fields: [
         { name: 'bar' }
     ],
     ...
 });

 var barField = MyApp.models.Foo.getField('bar');

 alert(barField.definedBy === MyApp.models.Foo); // alerts 'true'

When a field is inherited, this value will reference the class that originally defined the field.

 Ext.define('MyApp.models.Base', {
     extend: 'Ext.data.Model',

     fields: [
         { name: 'foo' }
     ],
     ...
 });

 Ext.define('MyApp.models.Derived', {
     extend: 'MyApp.models.Base',

     fields: [
         { name: 'bar' }
     ],
     ...
 });

 var fooField = MyApp.models.Derived.getField('foo');

 alert(fooField.definedBy === MyApp.models.Base); // alerts 'true'

factoryConfig : Object

If this property is specified by the target class of this mixin its properties are used to configure the created Ext.Factory.

ordinal : Number

The position of this field in the Ext.data.Model in which it was defined.

methods

Instance Methods

collate ( value1, value2 ) : Number

Compares two values to retrieve their relative position in sort order, taking into account any sortType. Also see compare.

Parameters

value1 :  Object

The first value.

value2 :  Object

The second value.

Returns

:Number

-1 if value1 is less than value2. 1 if value1 is greater than value2. 0 otherwise.

compare ( value1, value2 ) : Number

Compares two values to retrieve their relative position in sort order. Also see collate.

Parameters

value1 :  Object

The first value.

value2 :  Object

The second value.

Returns

:Number

-1 if value1 is less than value2. 1 if value1 is greater than value2. 0 otherwise.

convert ( value, record ) : Mixed

A function which converts the value provided by the Reader into the value that will be stored in the record. This method can be overridden by a derived class or set as a convert config.

If configured as null, then no conversion will be applied to the raw data property when this Field is read. This will increase performance. but you must ensure that the data is of the correct type and does not need converting.

Example of convert functions:

function fullName(v, record){
    return record.data.last + ', ' + record.data.first;
}

function location(v, record){
    return !record.data.city ? '' : (record.data.city + ', ' + record.data.state);
}

Ext.define('Dude', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'fullname',  convert: fullName},
        {name: 'firstname', mapping: 'name.first'},
        {name: 'lastname',  mapping: 'name.last'},
        {name: 'city', defaultValue: 'unknown'},
        'state',
        {name: 'location',  convert: location}
    ]
});

// create the data store
let store = new Ext.data.Store({
    model: 'Dude',
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            rootProperty: 'daRoot',
            totalProperty: 'total'
        }
    }
});

var myData = [
    { key: 1,
      name: { first: 'Fat',    last:  'Albert' }
      // notice no city, state provided in data object
    },
    { key: 2,
      name: { first: 'Barney', last:  'Rubble' },
      city: 'Bedrock', state: 'Stoneridge'
    },
    { key: 3,
      name: { first: 'Cliff',  last:  'Claven' },
      city: 'Boston',  state: 'MA'
    }
];

Parameters

value :  Mixed

The data value as read by the Reader, if undefined will use the configured defaultValue.

record :  Ext.data.Model

The data object containing the Model as read so far by the Reader. Note that the Model may not be fully populated at this point as the fields are read in the order that they are defined. fields array.

Returns

:Mixed

The converted value for storage in the record.

getAllowBlank Boolean

Gets allowBlank for this field. See allowBlank.

Returns

:Boolean

allowBlank

getType String

Gets a string representation of the type of this field.

Returns

:String

type

hasMapping Boolean

Checks if this field has a mapping applied.

Returns

:Boolean

true if this field has a mapping.

isEqual ( value1, value2 ) : Boolean

Tests whether two values are equal based on this field type. This uses the compare method to determine equality, so this method should generally not be overridden.

Parameters

value1 :  Object

The first value.

value2 :  Object

The second value.

Returns

:Boolean

true if the values are equal.

serialize ( value, record ) : String

A function which converts the Model's value for this Field into a form which can be used by whatever Ext.data.writer.Writer is being used to sync data with the server.

Parameters

value :  Mixed

The Field's value - the value to be serialized.

record :  Ext.data.Model

The record being serialized.

Returns

:String

The string that represents the Field's value.

Static Methods

override ( members ) : Ext.Base
static sta

Override members of this class. Overridden methods can be invoked via Ext.Base#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!");

        this.callParent(arguments);

        alert("Meeeeoooowwww");
    }
});

var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
                          // alerts "I'm a cat!"
                          // alerts "Meeeeoooowwww"

Direct use of this method should be rare. Use Ext.define instead:

Ext.define('My.CatOverride', {
    override: 'My.Cat',
    constructor: function() {
        alert("I'm going to be a cat!");

        this.callParent(arguments);

        alert("Meeeeoooowwww");
    }
});

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).

Parameters

members :  Object

The properties to add to this class. This should be specified as an object literal containing one or more properties.

Returns

:Ext.Base

this class

ExtReact 6.7.0