/** @author Amol Salunkhe @version Date of Creation: 11/29/2016 */ (function(){ CommonClassFactory = function (){ function createDataSource (url,dataTemplate,argumentField,dataPostProcessFn,dataReshapeFn){ return { load: function (loadOptions) { var d = new $.Deferred(); var params = {}; //Getting filter options if (loadOptions.filter) { params.filter = JSON.stringify(loadOptions.filter); } //Getting sort options if (loadOptions.sort) { params.sort = JSON.stringify(loadOptions.sort); } //Getting dataField option if (loadOptions.dataField) { params.dataField = loadOptions.dataField; } //If the select expression is specified if (loadOptions.select) { params.select= JSON.stringify(loadOptions.select); } //Getting group options if (loadOptions.group) { params.group = JSON.stringify(loadOptions.group); } //skip and take are used for paging params.skip = loadOptions.skip; //A number of records that should be skipped params.take = loadOptions.take; //A number of records that should be taken $.getJSON(url, params).done(function (data) { if($.isFunction(dataReshapeFn)){ data = dataReshapeFn(data); } //arrange the data according to the dataTemplate if(dataTemplate){ var map = {}; var dataAsPerTemplate = new Array(dataTemplate.length); var cnt = 0, maxCnt = dataAsPerTemplate.length; while(cnt < maxCnt){ map[dataTemplate[cnt][argumentField]] = cnt; dataAsPerTemplate[cnt] = $.extend( true,{}, dataTemplate[cnt]); cnt++; }//while(cnt < maxCnt) cnt = 0, maxCnt = data.length; while(cnt < maxCnt){ if($.isNumeric(map[data[cnt][argumentField]])){ dataAsPerTemplate[map[data[cnt][argumentField]]] = $.extend( true,{}, data[cnt]); } cnt++; }//while(cnt < maxCnt) data = dataAsPerTemplate; }//if(dataTemplate) if($.isFunction(dataPostProcessFn)){ data = dataPostProcessFn(data); } //If your data service allows returning total count in a single request, use the following code d.resolve(data, { totalCount: data.length }); //where data.items array of items, data.count a number of items without applying filter //In this case, you will not need to implement the totalCount method as shown below }); return d.promise(); } }; }//function createDataSource this.createDataSource = createDataSource; return this; };//CommonClassFactory = function })();//anonym function -- IFFE