By Alvin Alexander. Last updated: June 4, 2016
To add Save and Cancel buttons to a Sencha ExtJS form or panel, use the following code:
dockedItems: [ { xtype: 'toolbar', flex: 1, dock: 'bottom', ui: 'footer', layout: { pack: 'end', type: 'hbox' }, items: [ { xtype: 'button', text: 'Cancel', itemId: 'cancel', iconCls: 'cancel' }, { xtype: 'button', text: 'Save', itemId: 'save', iconCls: 'save' } ] } ]
That code adds the buttons to a Sencha toolbar that’s docked at the bottom of the container it’s used in. As you can see, the code is clean and easily reusable (via copy and paste).
I know that this code works in Sencha ExtJS, and it probably works in Sencha Touch as well.
A complete example
If it helps to see how that code is used in a complete example, here’s the source code for a form that’s implemented as a Sencha ExtJS Window:
Ext.define('Finance.view.TransactionForm', { extend: 'Ext.window.Window', alias: 'widget.transactionform', height: 200, width: 550, layout: { align: 'stretch', type: 'vbox' }, title: 'Transaction', items: [ { xtype: 'form', bodyPadding: 5, layout: { type: 'vbox', align: 'stretch' }, defaults: { anchor: '100%', xtype: 'textfield', blankText: 'This is required', labelWidth: 90 }, items: [ // TODO do i need this hidden field? { xtype: 'hiddenfield', fieldLabel: 'Label', name: 'id' }, // symbol, type, price, qty, datetime, notes { fieldLabel: 'Symbol', name: 'symbol', itemId: 'symbol', allowBlank: false, maxLength: 10, maskRe: /([a-zA-Z0-9]+)$/ // only allow letters and numbers, no spaces }, { fieldLabel: 'Type (B/S)', name: 'ttype', itemId: 'ttype', allowBlank: false, maxLength: 1 //TODO convert this field to a radio button }, { fieldLabel: 'Price', name: 'price', itemId: 'price', allowBlank: false, //TODO add a regex here to validate a double maxLength: 10 }, { fieldLabel: 'Qty', name: 'quantity', itemId: 'quantity', allowBlank: false, maxLength: 10, maskRe: /([0-9]+)$/ // int field }, { // TODO is this needed? xtype: 'hiddenfield', fieldLabel: 'datetime', name: 'datetime' }, { fieldLabel: 'Notes', xtype: 'textareafield', name: 'notes', itemId: 'notes', allowBlank: true }, ] } ], dockedItems: [ { xtype: 'toolbar', flex: 1, dock: 'bottom', ui: 'footer', layout: { pack: 'end', type: 'hbox' }, items: [ { xtype: 'button', text: 'Cancel', itemId: 'cancel', iconCls: 'cancel' }, { xtype: 'button', text: 'Save', itemId: 'save', iconCls: 'save' } ] } ] });
This code comes from my Finance-DesktopClient project.