我是JsGrid的新手。我当前正在使用JsGrid配置的“ data”属性通过Ajax调用加载数据。但是,我想允许用户过滤数据。我知道可以在客户端或服务器端完成。我没有偏好,但是如果我使用服务器端,则看起来我需要“控制器”并实现“ loadData”功能。但是,我看到的代码将“ loadData”函数的“ filter”参数发送到$ .ajax()调用的“ data”属性。
我的API使用Node.js(Express&Body-Parser)编写;我可以从我的API中收到什么?这将是一个JSON文档,其中包含用户在文本框中输入的所有过滤值的field:value对吗?如果是这样,我想我需要将这些值发送到我的存储过程中(使用Tedious)?
我知道,听起来很明显,但是在我开始那条路之前,我想确保我朝着正确的方向前进。
谢谢!
这是我的原型代码(尚未执行):
var db = {
loadData: (filter)=>{
$.ajax({
type: 'GET',
url: '/kudosapi/report?member=1',
data: filter,
dataType: 'json',
error: (xhr,status,error)=>{
errorHandler(xhr,status,error);
},
success: (data)=>{
// Load grid
}
});
}
}
答案 0 :(得分:0)
要使其在服务器端工作,您需要实现pageLoading: true
和pageIndex: n
,并返回数据及其长度。
这是我如何解决它的一个例子
$("#my-table").jsGrid({
width: "100%",
filtering: true,
inserting: false,
editing: false,
sorting: true,
paging: true,
pageSize: 4,
autoload: true,
pageLoading: true,
pageIndex: 1,
controller: {
loadData: function (filter) {
var d = $.Deferred();
var url = "your url";
$.ajax({
type: "GET",
url: url,
dataType: "json",
data: filter
}).done(function (response) {
d.resolve(response);
});
return d.promise().then(function(data) {
var startIndex = (filter.pageIndex - 1) * filter.pageSize;
return {
data: data(startIndex, startIndex + filter.pageSize),
itemsCount: data
};
});
}
},
fields: []
});