我正在尝试将过滤器应用于具有活动分页的数据存储。 我目前正在使用静态数据存储而不是使用代理。 但是,过滤器将应用于数据网格中显示的当前页面,而不是整个数据存储。
案例1:我尝试停用分页,应用过滤器,然后再次激活分页。但是,过滤器对当前页面是活动的,而不是整个数据存储。
案例2 :在应用案例1 之前,我尝试将分拣机添加到数据存储中。它也没用。
有没有办法过滤所有数据并在分页中显示过滤结果?
注意:我试图在Sencha Fiddle上写一个类似的代码,但网格没有在这个小提琴上分页,there is sample code
答案 0 :(得分:1)
静态存储数据不支持分页,因为分页是由代理和阅读器完成的。但是,您可以使用pagingmemory
在memory
代理(ExtJS 4)或enablePaging:true
代理(ExtjS 5/6)上定义数据。
对于ajax
个代理,通过将页面大小和启动属性发送到服务器来完成分页。如果服务器忽略这些属性并回送它在数据库中的所有内容,则分页将不适用于ajax
个代理。服务器只能发回应该在网格中可见的记录。
请注意,ajax
代理还必须提供totalCount
才能使分页正常工作。要查看pagingToolbar的工作原理,请添加到您的商店:totalCount:25
。瞧,您的pagingToolbar向您显示有五个页面。其他所有内容都无法正常运行,因为请参阅1.再次删除totalCount
,它不会对您有所帮助。
通常,totalCount
由服务器提供并由读者提供给商店:JsonReader
如果服务器在设置的位置报告totalCount,则totalCount
发送totalProperty
remoteSort:true
财产。
如果您使用分页,并且希望始终看到25个条目并应用了正确的排序和过滤,则必须使用remoteFilter:true
和AjaxProxy
。如果是..
@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 ");
}
,则过滤和排序必须在服务器端实现。
您在客户端应用的过滤器将始终在分页后应用,因为分页发生在服务器端。它们不能是您设置远程过滤器的同一商店的一部分,因此您必须将网格绑定到以原始商店为源的ChainedStore。然后将客户端过滤器应用于链式存储,并将远程过滤器应用于原始商店。