在extJS中使用分页进行商店过滤

时间:2015-02-26 11:39:26

标签: javascript extjs pagination

我正在使用extJs4.0并且我创建了一个带分页的网格,我在每次调用中加载数据。单个负载中有25行。在列顶部有文本框以使用过滤器,但这些过滤器仅在单页上工作,因为我正在逐页加载数据。 在DB中有超过3500行。所以无法在一次通话中加载所有内容。 但我的要求是用加工值过滤整个数据(DB)。请告诉我如何实现它,或者是否可以在极端情况下使用如此庞大的数据。 请帮忙!!!!

1 个答案:

答案 0 :(得分:2)

您需要使用remoteFilter配置选项。这将委托所有过滤在服务器上完成,在完整数据集上,而不是当前加载的集合。

这会将过滤器参数传递给后端,因此您需要编写逻辑以在服务器上返回已过滤的分页数据集(如果需要/设置任何过滤器参数)。

Sencha Examples中有一个基本示例。

更新:

在将过滤器应用于商店时使用remoteFilter时,它会使用过滤器参数向服务器发出请求。您需要根据服务器端的这些参数来过滤数据集。

在PHP中,您可以执行以下操作:(伪代码)

<?php
// Include any db classes or frameworks your using, and anything else you need
$filters = array();

if (isset($_POST['customer_name'])) {
    $filters[] = array('customer_name' => $_POST['customer_name']) // dont forget to escape it for security
}

你应该已经通过了分页参数,所以当你从数据库中获取数据时,你可以做类似的事情

$customers = $model->getCustomers($filters, $options); // pass in filter and pagination options

这可能会导致查询,例如

'SELECT * FROM customers WHERE customer_name LIKE '%jones%' LIMIT 20, 20'

哪个会根据搜索参数返回20个过滤记录

在不知道您使用服务器端的情况下提供准确答案很困难,但这应该会为您的研究提供一个想法甚至基础。