本地数据集上jqgrid triggerToolbar的替代方法
我有一个jqgrid显示大量数据。通过jqueryajax调用(在jqgrid逻辑之外)定期从服务器检索数据。检索到的数据将与之前检索到的数据进行比较(并作为var存储在js中,作为jqgrid的数据)。如果它们不同,则刷新本地数据,然后触发jqgrid重新加载。jqgrid数据类型是jsonstring 这个解决方案运行得很好,除非用户在“过滤器”工具栏中有一个过滤器值。因为我在loadcomplete事件中设置了一个0.1秒的计时器来触发筛选器,所以当存在筛选器字符串时,整个网格刷新如下所示:本地数据集上jqgrid triggerToolbar的替代方法,jqgrid,filter,local,reload,Jqgrid,Filter,Local,Reload,我有一个jqgrid显示大量数据。通过jqueryajax调用(在jqgrid逻辑之外)定期从服务器检索数据。检索到的数据将与之前检索到的数据进行比较(并作为var存储在js中,作为jqgrid的数据)。如果它们不同,则刷新本地数据,然后触发jqgrid重新加载。jqgrid数据类型是jsonstring 这个解决方案运行得很好,除非用户在“过滤器”工具栏中有一个过滤器值。因为我在loadcomplete事件中设置了一个0.1秒的计时器来触发筛选器,所以当存在筛选器字符串时,整个网格刷新如下所示
- jqgrid中最初显示了20条记录(因为用户正在筛选列中的某个值)
- jqgrid被刷新,因为通过单独的ajax调用从服务器轮询的数据与存储在浏览器中的数据不同
- jqgrid将在很短的时间内显示所有新数据
- jqgrid筛选器在loadcomplete内触发。屏幕上又显示了20条记录
function filter() {
var searchFiler = $("#filter").val(), f;
if (searchFiler.length === 0) {
grid[0].p.search = false;
$.extend(grid[0].p.postData,{filters:""});
}
f = {groupOp:"OR",rules:[]};
f.rules.push({field:"name",op:"cn",data:searchFiler});
f.rules.push({field:"note",op:"cn",data:searchFiler});
grid[0].p.search = true;
$.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
grid.trigger("reloadGrid",[{page:1,current:true}]);
}
有人能帮我吗?非常感谢。与
数据类型:“本地”
相比,数据类型的用法:“jsonstring”
有一些细微的差别。您可以比较代码的相应部分。datatype的代码差异之一:“local”
是使用了addLocalData
和populateVisible
函数。最后一个功能(populateVisible
)仅在虚拟滚动(scroll:1
或scroll:true
)的情况下使用。在您的情况下,datatype:“jsonstring”
和datatype:“local”
之间的重要区别是在datatype:“local”
的情况下调用addLocalData
函数addLocalData
应用本地数据的分组和筛选(请参阅)。此外,它还将显示的行列表剪切到当前页面(请参阅)
因此,如果服务器返回未过滤的数据,并且需要显示过滤后的数据,那么应该使用datatype:“local”
而不是datatype:“jsonstring”
。您应该使用data
而不是datastr
。您可以使用localReader
而不是jsonReader
(请参阅),或者只需手动将服务器返回的数据转换为默认情况下可以读取的格式localReader
更新:在中,我描述并包括了演示如何使用localReader
您也可以将从服务器返回的输入数据转换为标准格式(或以标准格式从服务器返回数据)。data
参数应该是命名对象的数组,其属性类似于colMode
中的列名。因此,您可以做的只是通过行
数组进行一个简单的循环,然后以jqGrid所需的格式创建另一个数组。相应的代码可能与以下内容有关:
//让我们将myImput与myImput.rows一起使用
//这里有cm,用作colModel参数的值
var mydata=[],input=myImput.rows,l=input.length,
cmLength=cm.长度,i,j,输入项,项目;
对于(i=0;i
在这种转换之后,您可以使用
mydata
array作为data
参数的值。谢谢您的详细解释。我不得不承认。Tony在创建jqgrid方面做得很好,但我通过阅读您的文章了解了更多关于jqgrid的信息。我一直尝试使用datatype local来处理从服务器轮询的数据,但网格总是呈现为空白。我无法想象文档中的默认localreader将如何工作。在所有dataype本地示例中,我只能看到包含列字段值数组的数组。但是默认的localReader需要格式{root:“rows”、page:“page”、total:“total”、records:“records”、repeatitems:false、cell:“cell”、id:“id”}。除了repeattimes之外,它与jsonreader相同。我遗漏了什么吗?@casbby:发布服务器返回的数据示例不容易吗?包括定义jqGrid的代码可以清除其他打开的问题。如果我猜您可以尝试使用datatype:“local”,data:mydata,localReader:{repeatitems:false}
而不是datatype:“jsonstring”,datastr:mydata
我从源代码中查看了addlocadata函数,它看起来很像eyeah。我从服务器上轮询的数据大致如下“{”页“:“1”,“总计”:1,“记录”:“1”,“行”:[{”id“:“1”,“单元格”:[“v1”,“v2”,“v3”,“v4”]},{”id“:“2”,“单元格”:[“v1”,“v2”,“v3”,“v4”]},}”。我从源代码中查看了addlocaldata函数。它所做的第一件事是'if(!$.isArray(ts.p.data)){return;}'所以mydata可以