/** * Small utility class used internally to represent a Direct method. * @class Ext.direct.RemotingMethod * @ignore */ Ext.define('Ext.direct.RemotingMethod', { constructor: function(config){ var me = this, params = Ext.isDefined(config.params) ? config.params : config.len, name; me.name = config.name; me.formHandler = config.formHandler; if (Ext.isNumber(params)) { // given only the number of parameters me.len = params; me.ordered = true; } else { /* * Given an array of either * a) String * b) Objects with a name property. We may want to encode extra info in here later */ me.params = []; Ext.each(params, function(param){ name = Ext.isObject(param) ? param.name : param; me.params.push(name); }); } }, /** * Takes the arguments for the Direct function and splits the arguments * from the scope and the callback. * @param {Array} args The arguments passed to the direct call * @return {Object} An object with 3 properties, args, callback & scope. */ getCallData: function(args){ var me = this, data = null, len = me.len, params = me.params, callback, scope, name; if (me.ordered) { callback = args[len]; scope = args[len + 1]; if (len !== 0) { data = args.slice(0, len); } } else { data = Ext.apply({}, args[0]); callback = args[1]; scope = args[2]; // filter out any non-existent properties for (name in data) { if (data.hasOwnProperty(name)) { if (!Ext.Array.contains(params, name)) { delete data[name]; } } } } return { data: data, callback: callback, scope: scope }; } });