【发布时间】:2014-08-30 17:22:51
【问题描述】:
(我确定这是一个 UFU,但我似乎找不到原因)
使用 jqGrid 显示数据。双击一行会打开一个包含向下钻取信息的新页面。单击“返回”按钮时,我想恢复过滤条件。
过滤条件存储在grid.getGridParam( "postData" ).filters 的localStorage 中。我试图在加载时恢复它,但没有取回值。
混淆因素可能是我在加载时通过为每列查找唯一值来创建过滤器工具栏的值(请参阅here)。这说明(对我而言)在填充下拉列表之前我无法设置过滤器值。为此,我尝试使用“loadComplete”函数(调用列表填充函数)。填充控件后,我将调用grid.jqGrid( 'setGridParam', { 'postData' : localStorage[ "filter" ]});。不幸的是,这似乎没有任何效果。
从我读过的所有内容来看,这是可行的。我错过了什么?
注意:我也尝试过this,但由于上面“loadComplete”中设置的值,我认为它不起作用。
编辑:过滤器值被保存在这里:
ondblClickRow: function( rowid, iRow, iCol, e )
{
localStorage[ 'filter' ] = grid.getGridParam("postData").filters;
window.location = "info.php?idx=" + grid[0].p.data[ rowid - 1 ].IssueId;
}
有个值由此保存。我测试页面何时重新加载(并且还使用console.log() 观察它)
loadonce 绝对是true。
这是我使用的参数:
url: "loadIssues.php",
datatype: "json",
colNames: [ (list of values) ],
colModel: [ (array of values) ],
pager: "#pager2",
viewrecords: true,
sortorder: "desc",
gridview: true,
autoencode: true,
ignoreCase : true,
loadonce : true,
width: 800,
height: "auto",
shrinkToFit: true,
search: true,
jsonReader: {
repeatitems: false,
root: "rows"
},
编辑:
这是解决方法:使用 $( this ) 是我的错误。将其替换为对网格控件的引用可以解决问题。
这是我在loadComplete中使用的代码:
loadComplete: function( data )
{
setSearchSelect( <column name> );
if( localStorage.hasOwnProperty( 'filter' ))
{
postData = $( "#list2" ).jqGrid( "getGridParam", "postData" );
paramNames = $( "#list2" ).jqGrid("getGridParam", "prmNames");
postData.filters = JSON.parse( localStorage[ 'filter' ]);
postData[paramNames.search] = true;
localStorage.removeItem( 'filter' );
setTimeout( function()
{
$( "#list2" ).trigger( "reloadGrid" );
}, 100 );
}
}
【问题讨论】:
-
您能否包含代码片段,显示您在
localStorage中保存数据的方式和位置以及恢复方式和位置?你写了“我试图在加载时恢复它,但没有取回值。”你的意思是localStorage["filter"]是空的还是只是没有应用过滤器?你用的是哪个datatype?您是否使用loadonce: true?在loadComplete内设置过滤器肯定为时已晚。 -
我的语法很糟糕:应该阅读“我正在尝试在加载时恢复它,但过滤器值没有被恢复”。 localStorage 中的值正在正确返回。