我正在使用extJs4.0并且我创建了一个带分页的网格,我在每次调用中加载数据。单个负载中有25行。在列顶部有文本框以使用过滤器,但这些过滤器仅在单页上工作,因为我正在逐页加载数据。 在DB中有超过3500行。所以无法在一次通话中加载所有内容。 但我的要求是用加工值过滤整个数据(DB)。请告诉我如何实现它,或者是否可以在极端情况下使用如此庞大的数据。 请帮忙!!!!
答案 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个过滤记录
在不知道您使用服务器端的情况下提供准确答案很困难,但这应该会为您的研究提供一个想法甚至基础。