/**
* @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);
}
});