javascript - Cannot reload data in Fuelux Datagrid -
i have tried reload data populated ajax call cant work, shows old data after using reload method. thing if change variables populate different data , try call following code without refreshing page not reload updated data =/ here code:
function populatedatagrid() { $.ajaxsetup({async: false}); var gridinfo=""; $.post("lib/function.php",{activity: activity, shift: shift, date: date}, function (output){ gridinfo = json.parse(output); }); $.ajaxsetup({async: true}); // initializing datagrid var datasource = new staticdatasource({ columns: [ { property: 'id', label: '#', sortable: true }, { property: 'date', label: 'date', sortable: true }, .... ], formatter: function (items) { var c=1; $.each(items, function (index, item) { item.select = '<input type="button" id="select'+c+'" class="select btn" value="select" onclick="">'; c=c+1; }); }, data: gridinfo, delay:300 }); $('#grid').datagrid({ datasource: datasource }); $('#grid').datagrid('reload'); $('#modal-fast-appointment-results').modal({show:true}); }
i found solution... had create new datasource (lets call "ajaxdatasource") , add ajax request functionality within data constructor:
(function (root, factory) { if (typeof define === 'function' && define.amd) { define(['underscore'], factory); } else { root.ajaxdatasource = factory(); } }(this, function () { var ajaxdatasource = function (options) { this._formatter = options.formatter; this._columns = options.columns; this._delay = options.delay || 0; this._data = options.data; }; ajaxdatasource.prototype = { columns: function () { return this._columns; }, data: function (options, callback) { var self = this; settimeout(function () { var data; $.ajax({ url: 'getdata.php', type: 'post', data: 'param1:param1,param2,param2,...,paramn:paramn', // optional in case have send params getdata.php datatype: 'json', async: false, success: function(result) { data = result; }, error: function(data){ //in case want debug , catch possible error // console.log(data); } }); // searching if (options.search) { data = _.filter(data, function (item) { var match = false; _.each(item, function (prop) { if (_.isstring(prop) || _.isfinite(prop)) { if (prop.tostring().tolowercase().indexof(options.search.tolowercase()) !== -1) match = true; } }); return match; }); } var count = data.length; // sorting if (options.sortproperty) { data = _.sortby(data, options.sortproperty); if (options.sortdirection === 'desc') data.reverse(); } // paging var startindex = options.pageindex * options.pagesize; var endindex = startindex + options.pagesize; var end = (endindex > count) ? count : endindex; var pages = math.ceil(count / options.pagesize); var page = options.pageindex + 1; var start = startindex + 1; data = data.slice(startindex, endindex); if (self._formatter) self._formatter(data); callback({ data: data, start: start, end: end, count: count, pages: pages, page: page }); }, this._delay) } }; return ajaxdatasource; })); after defining new datasource, need create , call datagrid usual:
function populatedatagrid(){ // initializing datagrid var datasource = new ajaxdatasource({ columns: [ { property: 'id', label: '#', sortable: true }, { property: 'date', label: 'date', sortable: true }, .... ], formatter: function (items) { // in case want add customized items, example button var c=1; $.each(items, function (index, item) { item.select = '<input type="button" id="select'+c+'" class="select btn" value="select" onclick="">'; c=c+1; }); }, delay:300 }); $('#grid').datagrid({ datasource: datasource }); $('#grid').datagrid('reload'); $('#modal-results').modal({show:true}); } so have our datagrid data populated via ajax request ability reload data without refreshing page.
hope helps someone!
Comments
Post a Comment