我有一个可以使用搜索功能的网格面板。每次按下搜索按钮,都会传递一个查询,并对网格面板进行排序并显示
查询工作正常。但当我按下“下一页按钮”时查询信息丢失并返回原始状态[没有查询执行]
bbar: new Ext.PagingToolbar(
{
store: store,
pageSize: 20,
plugins: [new Ext.ux.Andrie.pPageSize()],
displayInfo: true,
width: '400',
refresh: function(pt, o) {
store.reload();
FormPanel.findById('grid').getView().refresh();
},
emptyMsg: "No message to display"
}
)
为什么会这样?
答案 0 :(得分:1)
您使用的是服务器端脚本(例如PHP)吗?在获取您在网格中显示的数据..?我没有尝试过使用lastOption的东西,但是你可以尝试这个..只有一个简单的PHP技巧...使用$_SESSION
...我也有像你一样的情况.. $ _SESSION函数有效对我来说。
以下是示例代码。
通常在服务器端,你有一个这样的代码来获取数据库中的一些数据。 您需要POST从搜索字段发送的参数。你没有在这里发布你的服务器端代码。所以我认为它看起来像这样。
//首先需要将搜索字段中的参数发布到数据库中进行搜索//
$pattern = $_REQUEST['search_pattern']; //you may also use the $_POST instead of $_REQUEST
//您的数据库查询可能如下所示..
("SELECT * FROM your_table WHERE table_data LIKE %$pattern% ");
//每次加载网格时它总是会调用server.so如果你设置一个条件,要显示的数据将取决于你的搜索字段的值,如果你的$_POST
函数返回NULL肯定它不会显示任何数据。
因此,如果您在搜索字段中放置一个值并加载网格。在第一次加载时,服务器获得了模式的值,因此您可以在网格上获得输出但请记住服务器端页面仅保留一次值,如果服务器端页面被刷新或再次加载,则值现在将为null,除非你又在搜索字段上放了一些东西。这就是我认为你按下下一个按钮后没有显示的原因,因为下一个按钮再次加载服务器端页面,但这次下一个按钮没有参数,这就是服务器无法获取任何数据的原因,因为模式现在为NULL 。因此,为了保存您之前输入的值很长一段时间,我们需要使用$ _SESSION ... //代码看起来就像这个。
因为每次我们加载服务器页面时它总是执行$ _POST函数,所以如果我们发布一个空值,那么它也会导致null。来获取我们之前发布的值,从而形成搜索字段我们将把值放到会话中。这就是......
$pattern = $_POST['search_pattern'];
首先,如果您在搜索字段中键入内容,$ pattern将有一个值,然后我们将其保存到会话变量,
$_SESSION['pattern'] = $pattern;
但请记住,每次按下下一个按钮时,下一个按钮也会加载服务器端页面重新加载服务器页面,此时$_POST
返回一个空值,因为我们没有发送参数用下一个按钮。所以我们只需要在会话变量上存储一个值,POST就有一个值,就在你在搜索字段上输入一个单词时。我们需要这样做。
$pattern = $_POST['search_pattern'];
if($pattern != ''){
// we need to check if the value is null because when you pressed the next button after it reloads the pages it would now be null and this time we need to get the previous value. while if the value is not null we will save it to the session variable..
$_SESSION['pattern'] = $pattern;
}else{
// here is when the next button is pressed it will go here since the $_POST is now null
we will get the previous value that we saved on the session variable//
$pattern = $_SESSION['$pattern'];
}
然后,将数据查询到数据库......
整个代码看起来像这样..
<?php
session_start();
// mysql connection here//
$pattern = $_POST['search_pattern'];
if($search_pattern !=''){
$_SESSION['pattern'] = $pattern;
}else{
$pattern = $_SESSION['pattern'];
}
$start = ($_REQUEST['start'] != '') ? $_REQUEST['start'] : 0;
$limit = ($_REQUEST['limit'] != '') ? $_REQUEST['limit'] : 20;
$query =mysql_query("SELECT * FROM students WHERE lname LIKE '$pattern%' ");
$totaldata = mysql_num_rows($query);
while($row = mysql_fetch_assoc($query)){
$items[] = array(
'id' => $row['student_id'],
'lname' => $row['lname'],
'fname' => $row['fname'],
'mname' => $row['mname'],
'gender' => $row['gender'],
);
}
$matches = Array();
foreach ($items as $item) {
$matches[] = $item;
}
echo '({"totalCount":"'.$totaldata.'","matches":'.json_encode($matches).'})';
?>
答案 1 :(得分:0)
不确定您使用的是哪家商店。但重新加载需要选项辩护,
使用配置的Reader和上次执行的加载操作中的选项,从配置的Proxy重新加载Record缓存。
参数: 选项:对象 (可选)包含加载选项的对象,可以覆盖上次加载操作中使用的选项。有关详细信息,请参阅load(默认为null,在这种情况下使用lastOptions)。
在现有的参数中添加新的参数:
lastOptions = myStore.lastOptions;
Ext.apply(lastOptions.params, {
myNewParam: true
});
myStore.reload(lastOptions);
返回: 空隙