如何在ExtJS 5中使用分页过滤网格数据

时间:2015-12-01 09:49:55

标签: javascript extjs extjs5

我正在尝试将过滤器应用于具有活动分页的数据存储。 我目前正在使用静态数据存储而不是使用代理。 但是,过滤器将应用于数据网格中显示的当前页面,而不是整个数据存储。

案例1:我尝试停用分页,应用过滤器,然后再次激活分页。但是,过滤器对当前页面是活动的,而不是整个数据存储。

案例2 :在应用案例1 之前,我尝试将分拣机添加到数据存储中。它也没用。

有没有办法过滤所有数据并在分页中显示过滤结果?

注意:我试图在Sencha Fiddle上写一个类似的代码,但网格没有在这个小提琴上分页,there is sample code

1 个答案:

答案 0 :(得分:1)

  1. 静态存储数据不支持分页,因为分页是由代理和阅读器完成的。但是,您可以使用pagingmemorymemory代理(ExtJS 4)或enablePaging:true代理(ExtjS 5/6)上定义数据。

  2. 对于ajax个代理,通过将页面大小和启动属性发送到服务器来完成分页。如果服务器忽略这些属性并回送它在数据库中的所有内容,则分页将不适用于ajax个代理。服务器只能发回应该在网格中可见的记录。

  3. 请注意,ajax代理还必须提供totalCount才能使分页正常工作。要查看pagingToolbar的工作原理,请添加到您的商店:totalCount:25。瞧,您的pagingToolbar向您显示有五个页面。其他所有内容都无法正常运行,因为请参阅1.再次删除totalCount,它不会对您有所帮助。

  4. 通常,totalCount由服务器提供并由读者提供给商店:JsonReader如果服务器在设置的位置报告totalCount,则totalCount发送totalProperty remoteSort:true财产。

  5. 如果您使用分页,并且希望始终看到25个条目并应用了正确的排序和过滤,则必须使用remoteFilter:trueAjaxProxy。如果是.. @Execute public void execute(EPartService partService,MApplication application,EModelService modelService) { MPart part = MBasicFactory.INSTANCE.createPart(); part.setLabel("New Part"); part.setContributionURI("platform:/plugin/com.my.First.app/src/com/my/first/Parts/EditorPart/EmptyPart"); List<MPartStack> stacks = modelService.findElements(application, null, MPartStack.class, null); stacks.get(2).getChildren().add(part); partService.showPart(part, PartState.ACTIVATE); } @Execute public void execute() { //This Hello is getting printed. System.out.println("Hello "); } ,则过滤和排序必须在服务器端实现。

  6. 您在客户端应用的过滤器将始终在分页后应用,因为分页发生在服务器端。它们不能是您设置远程过滤器的同一商店的一部分,因此您必须将网格绑定到以原始商店为源的ChainedStore。然后将客户端过滤器应用于链式存储,并将远程过滤器应用于原始商店。