2012-07-30 33 views
0

我有一个与搜索功能一起工作的网格面板。每次按下搜索按钮时,都会传递一个查询,并对网格面板进行排序并显示。结果与Extjs网格面板丢失“下一个按钮”

该查询正常工作。但是,当我按下“下一页按钮”的查询信息迷路了,并返回到原来的状态[不执行查询]

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

不确定您正在使用哪个商店。但重新加载需要选项argurments,

使用配置的读取器和执行的上次加载操作的选项,从配置的代理重新加载记录缓存。

参数: 选项:对象 (可选)包含加载选项的对象,它可以覆盖上次加载操作中使用的选项。有关详细信息,请参阅负载(默认为null,在这种情况下使用lastOptions)。

要新PARAMS添加到现有PARAMS:

lastOptions = myStore.lastOptions; 
Ext.apply(lastOptions.params, { 
    myNewParam: true 
}); 
myStore.reload(lastOptions); 

返回: 无效

参考:http://extjs.cachefly.net/ext-3.4.0/docs/

1

您正在使用的服务器端脚本(如PHP)?在获取您在网格中显示的数据..?我没有尝试过使用lastOption的东西,但你可以试试这个..它只是一个简单的PHP技巧...使用$_SESSION ...我也有像你一样的情况..并且$ _SESSION函数适用于我。

下面是示例代码。

通常在服务器端,你有这样的代码来获取数据库中的一些数据。 您需要发送从搜索字段发送的参数。你没有在这里发布你的服务器端代码。所以我会假设它看起来像这样。你需要从后提交到在数据库搜索的搜索参数

//第一件事//

$pattern = $_REQUEST['search_pattern']; //you may also use the $_POST instead of $_REQUEST 

//你的数据库查询可能是这样的..

("SELECT * FROM your_table WHERE table_data LIKE %$pattern% "); 

//每次载入网格时。它会一直调用server.so,如果你提出一个条件,即要显示的数据将取决于你的搜索字段的值,如果你的函数返回一个NULL,它肯定不会显示任何数据。

所以,如果你在搜索字段中加载一个值并加载网格。在第一次加载时,服务器获得了该模式的值,因此您在网格上获得了输出,但请记住,服务器端页面仅保留一次值,如果服务器端页面已刷新或再次加载,值现在将为空,除非你再次在搜索字段上放置一些东西。这就是我认为在按下下一个按钮后没有显示的原因,因为下一个按钮再次加载服务器端页面,但是这次下一个按钮没有参数,这就是服务器无法获取任何数据的原因,因为该模式现在是NULL 。因此,为了保持您长时间输入的价值,我们需要使用$ _SESSION ... //代码看起来像这样。

因为每次我们加载服务器页面,它总是执行$ _POST函数,所以如果我们发布一个空值,因此它也会导致一个null也可以获得我们前一段时间发布的值搜索字段,我们会把这个值放到会话中。在这里它去...

$pattern = $_POST['search_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).'})'; 

?>