Jquery Kendo-通过页面上的代码保存网格过滤器只有日期过滤器网格列有问题
我的网页上有一个剑道网格,我正在尝试使用Jquery Kendo-通过页面上的代码保存网格过滤器只有日期过滤器网格列有问题,jquery,date,filter,grid,kendo-ui,Jquery,Date,Filter,Grid,Kendo Ui,我的网页上有一个剑道网格,我正在尝试使用会话存储以编程方式保存网格过滤器,这在很大程度上是有效的 我遇到的问题是,当我在日期列上放置筛选器时,当用户导航回该页面时,我尝试重新应用该筛选器时,其中一个匿名函数b/c中出错,toLowerCase()方法不存在。如果在字符串列上进行过滤,则过滤器工作正常。我可以应用多个过滤器并将它们保存到sessionStoragevar,然后重新应用到网格。只有在日期列中我才有问题 我花了一段时间才弄明白如何使用以下语法获取剑道网格过滤器: var theKgri
会话存储
以编程方式保存网格过滤器,这在很大程度上是有效的
我遇到的问题是,当我在日期列上放置筛选器时,当用户导航回该页面时,我尝试重新应用该筛选器时,其中一个匿名函数b/c中出错,toLowerCase()
方法不存在。如果在字符串列上进行过滤,则过滤器工作正常。我可以应用多个过滤器并将它们保存到sessionStorage
var,然后重新应用到网格。只有在日期列中我才有问题
我花了一段时间才弄明白如何使用以下语法获取剑道网格过滤器:
var theKgridFilters = $("#gridList").data("kendoGrid").dataSource.filter();
然后要将其存储在会话存储
变量中,我必须stringify()
对象,否则它将无法在该变量中保存网格过滤器:
sessionStorage.setItem('theGridFilters', JSON.stringify(theKgridFilters));
接下来,为了在网格上重新应用过滤器,我必须将字符串转换回JSON对象b/c过滤器是一个具有属性的对象,因此我使用了以下方法:
if (sessionStorage.theGridFilters) {
gridFilter = sessionStorage.theGridFilters;
gridFilter = $.parseJSON(gridFilter);
}
将其应用于grids数据源过滤器属性:
filter: gridFilter,
当我在日期列上过滤网格时,下面这一行会抛出错误:
function anonymous(d, __f, __o) {
return (d.Last_Modified_Date.toLowerCase() == '2013-01-25t06:00:00.000z')
}
其中,包含筛选器的字段为上次修改日期。我对使用jQuery、JS等相当陌生,从我所读到的内容来看,anonymous()FN是动态创建的,所以我认为我无法改变这一点
我在线查看,有人提到在toLowerCase()
之前添加toString()
函数。我在调试器中尝试了它,它成功了,但我不确定如何通过代码访问它来进行更改。看起来匿名函数是根据IE调试器的调用堆栈从kendo.web.js文件调用的
此外,调试器中日期字段的值如下所示:
d.Last_Modified_Date Wed Jan 25 00:00:00 CST 2013 Object, (Date)
所以我甚至不确定它是否能将该值等同于上面匿名fn中的字符串,即:'2013-01-25t06:00:00.000z'
请让我知道,如果有任何人有任何见解,以绕过这个日期过滤器保存问题。这快把我逼疯了。也许还有另一种我不知道的方法来保存网格过滤器
提前感谢,,
布鲁斯 您观察此行为的原因是JSON.parse不会创建JavaScript日期对象。而是创建字符串:
typeof $.parseJSON(JSON.stringify(new Date())); // "string"
剑道UI框架然后尝试将日期过滤为字符串,因此出现错误
解决方法是使用指定:
在模式.model
中如何定义上次修改日期?你是否明确地将其定义为日期?嗨,OnaBai,是的,它被定义为日期:上次修改日期:{type:“date”,editable:false},谢谢你给了我使用sessionStorage的想法。哇,非常感谢Atanas Korchev!!!我永远也想不到。在此之前从未听说过复兴者fn,所以我需要仔细阅读。另外,在您上面提供的代码中,如果我用$.parseJSON()替换JSON.parse,它会因相同的错误而出错,但使用JSON.parse效果很好。我想我看到$.parseJSON()调用了JSON.parse,但不管怎样,我很高兴我能做到这一点。我花了大约两天的时间才弄明白。再次感谢,非常感谢!好的,我读了更多的内容,现在得到了JSON.parse()方法的复兴程序fn。它有助于传输数据。对于JSON.parse()方法,只有可选的reviver参数,而对于$.parseJSON()方法则没有,这就是为什么它不能与$.parseJSON()一起使用。
function dateReviver(key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
}
gridFilter = JSON.parse(gridFilter, dateReviver);