GXT Grid PagingListStore

时间:2017-08-01 18:09:47

标签: gwt gxt

我使用的是使用分页的网格,因此它使用ListLoader / MemoryProxy来管理页面。但在这种情况下,商店在任何给定时间只知道当前页面中的项目。我也使用支持排序的GroupingView(remoteSort = false)。但它只对商店中的内容进行排序,即当前页面。但是,如果一个组扩展到第二个页面,则排序不会考虑另一个页面上的组条目,因此在这种情况下排序是不正确的。有没有人有关于如何解决这个问题的解决方案或想法?

1 个答案:

答案 0 :(得分:1)

问题在于尝试将您对“网页”的想法映射到“群组” - 如果您在一致大小的网页中浏览结果,那么很有可能这与您的群组无法匹配。例如,只要组中每个只有几个项目,您可能会关闭到您期望的页面大小(加上或减去几个项目),但您必须考虑到分页时。但是当一个组(或连续的几个组)是一个页面的大小或更大时会发生什么?

例如,假设您将页面大小设置为25个项目,并且3个组正在设置中,A有15个项目,B有20个项目,C有50个。如果第一个页面有25个项目,那么< / p>

  1. 有15个A项而没有B项(因此该组不会被分解,页面也不会太大)
  2. 有15个A项和10个B项(因此页面尺寸合适)
  3. 有15个A项和20个B项(因此该组没有分解,页面至少有25个项目,但比预期的要大)。
  4. 好的,这有点烦人。当我们考虑第二页的项目时,它确实变得更糟:

    1. 页面必须从第16项而不是26开始,并且只有20个B项(如果您希望看到足够多的项目以及如何在大型网格中留空空间,仍会令人沮丧)。
    2. 页面从项目16开始,包含20个B项目,然后是5个C项目(由于B完成,并不像您描述的情况那么糟糕,但C不是 - 如果您希望将组合在一起,仍然令人沮丧)。
    3. 页面从第36项开始,包含所有50个C项目(可能会使浏览器停止在100个极端或组中的1000个项目。)
    4. 幸运的是,所有这一切都很容易实现:服务器告诉客户端它在分页结果对象中返回的内容,包括它发送的实际偏移量和项目(可能是也可能不是客户端请求的内容) )。

      通过分页将远程排序设置为false没有任何意义,因为服务器必须排序(或分组,这是一种排序)以便以一致的方式为您提供组。也就是说,如果您的查询仍然执行,则分组视图必须确保项目已正确分组。与分页详细信息一样,只要组中的项目位于每个组旁边,它们是否已排序(对于用户 ...可能很重要)对客户端来说实际上并不重要其他(因为视图不会再次对项目重新排序)。