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);