我正在尝试使用他们的 ListDataProvider 排序示例作为参考对 GWT 中的列进行排序
http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting
问题是我可以看到我的表列数据正在排序(通过使用调试器),但表永远不会刷新。查看上面链接中的示例,他们没有明确刷新显示。我在这里错过了什么吗?
谢谢。
我正在尝试使用他们的 ListDataProvider 排序示例作为参考对 GWT 中的列进行排序
http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting
问题是我可以看到我的表列数据正在排序(通过使用调试器),但表永远不会刷新。查看上面链接中的示例,他们没有明确刷新显示。我在这里错过了什么吗?
谢谢。
我的经验表明,排序处理程序(即 ListHandler)在创建 ListDataProvider 时对 List 很敏感。
所以我建议不要为 ListDataProvider 删除或设置新列表(当然我认为在创建时它应该至少有一个空(非空)列表)。
只需使用ListDataProvider.getList()
它并在上面做你的工作。
例如,要删除所有当前行并设置新数据,只需调用ListDataProvider.getList().clear()
然后ListDataProvider.getList().addAll(yourNewData);
不要调用setList()
,否则排序将不起作用。
这两个例子无用且令人困惑。
在说明如何使用单元格/网格表时,使用 ListHandlers 和 DataProviders 也没有太大帮助。
这些示例混淆并隐藏了 GWT 单元格/网格表的一个简单特征——您只需要在每次数据发生变化时替换列表并将其输入表中。
这些示例对 ListHandlers、Async 处理程序和 DataProviders 的使用使一个相当简单的过程复杂化,因为它引入了一大堆蓬松无用的抽象优雅。本质上,这些抽象和可怕的结构本身将记录推送和重新推送到表列表中。不要注意定时器的使用。
不妨把表格列表放在它的喇叭上,然后自己做——那样简单得多。我不记得我是怎么做的,因为我没有我的代码。
您需要做的是保留记录列表的缓冲区副本。这是要在表中显示的记录列表。
无论您是执行异步还是其他方式都无关紧要 - 您希望对数据进行的任何更改都将在该缓冲区副本上进行。您的 GWT-RPC 应该更新该缓冲区。
当表格请求升序排序时,您的比较器/过滤器将生成缓冲列表的升序副本,以使用 setRowData 替换表格中的数据。同样,当表请求降序或专门过滤时。
如果您希望让它为您管理分页,则使用 DataProvider 很有用。自己处理 GWT-RPC 要简单得多。DataProvider 应该通过请求服务器向它发送一个根据表的意愿排序/过滤的新列表来为您处理排序和过滤。你为什么要让服务器管理你的过滤/排序来消耗网络流量,除非你有超过 10 页的记录。
因此,对于一个简单的 50 条记录实验示例,请自行管理缓冲区列表。