/** * @class Ext.form.action.DirectLoad * @extends Ext.form.action.Load * <p>Provides {@link Ext.direct.Manager} support for loading form data.</p> * <p>This example illustrates usage of Ext.direct.Direct to <b>load</b> a form through Ext.Direct.</p> * <pre><code> var myFormPanel = new Ext.form.Panel({ // configs for FormPanel title: 'Basic Information', renderTo: document.body, width: 300, height: 160, padding: 10, // configs apply to child items defaults: {anchor: '100%'}, defaultType: 'textfield', items: [{ fieldLabel: 'Name', name: 'name' },{ fieldLabel: 'Email', name: 'email' },{ fieldLabel: 'Company', name: 'company' }], // configs for BasicForm api: { // The server-side method to call for load() requests load: Profile.getBasicInfo, // The server-side must mark the submit handler as a 'formHandler' submit: Profile.updateBasicInfo }, // specify the order for the passed params paramOrder: ['uid', 'foo'] }); // load the form myFormPanel.getForm().load({ // pass 2 arguments to server side getBasicInfo method (len=2) params: { foo: 'bar', uid: 34 } }); * </code></pre> * The data packet sent to the server will resemble something like: * <pre><code> [ { "action":"Profile","method":"getBasicInfo","type":"rpc","tid":2, "data":[34,"bar"] // note the order of the params } ] * </code></pre> * The form will process a data packet returned by the server that is similar * to the following format: * <pre><code> [ { "action":"Profile","method":"getBasicInfo","type":"rpc","tid":2, "result":{ "success":true, "data":{ "name":"Fred Flintstone", "company":"Slate Rock and Gravel", "email":"fred.flintstone@slaterg.com" } } } ] * </code></pre> */ Ext.define('Ext.form.action.DirectLoad', { extend:'Ext.form.action.Load', requires: ['Ext.direct.Manager'], alternateClassName: 'Ext.form.Action.DirectLoad', alias: 'formaction.directload', type: 'directload', run: function() { this.form.api.load.apply(window, this.getArgs()); }, /** * @private * Build the arguments to be sent to the Direct call. * @return Array */ getArgs: function() { var me = this, args = [], form = me.form, paramOrder = form.paramOrder, params = me.getParams(), i, len; // If a paramOrder was specified, add the params into the argument list in that order. if (paramOrder) { for (i = 0, len = paramOrder.length; i < len; i++) { args.push(params[paramOrder[i]]); } } // If paramsAsHash was specified, add all the params as a single object argument. else if (form.paramsAsHash) { args.push(params); } // Add the callback and scope to the end of the arguments list args.push(me.onSuccess, me); return args; }, // Direct actions have already been processed and therefore // we can directly set the result; Direct Actions do not have // a this.response property. processResponse: function(result) { return (this.result = result); }, onSuccess: function(result, trans) { if (trans.type == Ext.direct.Manager.self.exceptions.SERVER) { result = {}; } this.callParent([result]); } });