/** * @class Ext.form.action.Load * @extends Ext.form.action.Action * <p>A class which handles loading of data from a server into the Fields of an {@link Ext.form.Basic}.</p> * <p>Instances of this class are only created by a {@link Ext.form.Basic Form} when * {@link Ext.form.Basic#load load}ing.</p> * <p><u><b>Response Packet Criteria</b></u></p> * <p>A response packet <b>must</b> contain: * <div class="mdetail-params"><ul> * <li><b><code>success</code></b> property : Boolean</li> * <li><b><code>data</code></b> property : Object</li> * <div class="sub-desc">The <code>data</code> property contains the values of Fields to load. * The individual value object for each Field is passed to the Field's * {@link Ext.form.field.Field#setValue setValue} method.</div></li> * </ul></div> * <p><u><b>JSON Packets</b></u></p> * <p>By default, response packets are assumed to be JSON, so for the following form load call:<pre><code> var myFormPanel = new Ext.form.Panel({ title: 'Client and routing info', items: [{ fieldLabel: 'Client', name: 'clientName' }, { fieldLabel: 'Port of loading', name: 'portOfLoading' }, { fieldLabel: 'Port of discharge', name: 'portOfDischarge' }] }); myFormPanel.{@link Ext.form.Panel#getForm getForm}().{@link Ext.form.Basic#load load}({ url: '/getRoutingInfo.php', params: { consignmentRef: myConsignmentRef }, failure: function(form, action) { Ext.Msg.alert("Load failed", action.result.errorMessage); } }); </code></pre> * a <b>success response</b> packet may look like this:</p><pre><code> { success: true, data: { clientName: "Fred. Olsen Lines", portOfLoading: "FXT", portOfDischarge: "OSL" } }</code></pre> * while a <b>failure response</b> packet may look like this:</p><pre><code> { success: false, errorMessage: "Consignment reference not found" }</code></pre> * <p>Other data may be placed into the response for processing the {@link Ext.form.Basic Form}'s * callback or event handler methods. The object decoded from this JSON is available in the * {@link Ext.form.action.Action#result result} property.</p> */ Ext.define('Ext.form.action.Load', { extend:'Ext.form.action.Action', requires: ['Ext.data.Connection'], alternateClassName: 'Ext.form.Action.Load', alias: 'formaction.load', type: 'load', /** * @private */ run: function() { Ext.Ajax.request(Ext.apply( this.createCallback(), { method: this.getMethod(), url: this.getUrl(), headers: this.headers, params: this.getParams() } )); }, /** * @private */ onSuccess: function(response){ var result = this.processResponse(response), form = this.form; if (result === true || !result.success || !result.data) { this.failureType = Ext.form.action.Action.LOAD_FAILURE; form.afterAction(this, false); return; } form.clearInvalid(); form.setValues(result.data); form.afterAction(this, true); }, /** * @private */ handleResponse: function(response) { var reader = this.form.reader, rs, data; if (reader) { rs = reader.read(response); data = rs.records && rs.records[0] ? rs.records[0].data : null; return { success : rs.success, data : data }; } return Ext.decode(response.responseText); } });