在服务器端对 CellTable 进行排序
我目前正在使用 Gwt CellTable,通过 RPC 调用绑定到我的 GAE/Objectify 后端。
现在好了! :-)
然后我想对列进行排序,所以我读了 http://code.google.com/intl/it-IT/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting
异步远程排序部分很好地展示了如何对我的 AsyncDataProvider 进行排序,但是...我如何检索用户想要排序的列的名称?
它显示了以下代码: ColumnSortList sortList = table.getColumnSortList();
但是如何从中获取字符串名称呢?我只是想知道“surname”或“soldDate”,列绑定的字段的名称!然后我将它传递给我的 rpc 服务,并使用它对服务器端数据进行排序 query(...).order(
我是否遗漏了什么?
I'm currently using a Gwt CellTable, bound to my GAE/Objectify backend via RPC calls.
All right now! :-)
Then I want to sort columns, so I read http://code.google.com/intl/it-IT/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting
The Async Remote sorting sections shows very well how to get sorting into my AsyncDataProvider but... how can I retrieve the name of the column the user wants to sort?
It shows this code: ColumnSortList sortList = table.getColumnSortList();
But how can I get String names from that? I simply want to know "surname" or "soldDate", the name of the field the column is bound to! Then I will pass it to my rpc service, and use it to sort data server-side query(...).order(<field_name>)
Am I missing something?
UPD: interesting stuff here: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/77a0eaf8086218a6/effb8d3abe69270b#effb8d3abe69270b
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以按照表中的方式保留列名称的列表:
然后,当您需要获取排序列名称时:
*其中 MyEntity 是单元格表中显示的数据对象。
You can keep a list of column names ordered as they are in the table:
Then when you need to get the sort column name:
*where MyEntity is your data object displayed in the cell table.
聚会有点晚了,但这里有一个基于 当前文档(请参阅“使用 AsyncDataProvider 进行列排序”部分)。
当我们添加列时,我们可以简单地设置
dataStoreName
:然后我们可以在稍后排序时检索列的
dataStoreName
:使用此方法,我们可以将列名称直接传递给我们的 RPC 方法。它甚至允许我们使用与 UI/客户端使用的列名称不同的名称(例如数据库列名称)。
A bit late to the party, but here's a more straight-forward solution based off of the current documentation (see section 'ColumnSorting with AsyncDataProvider').
When we're adding our columns we can simply set the
dataStoreName
:Then we can retrieve the column's
dataStoreName
later when sorting:Using this method we can pass the column name directly to our RPC method. It even allows us to use a different name (eg. the database column name) than the column name used on the UI/client side.
我已经使用类似的东西作为应用程序列对象。
公共类 ScrollTableColumn
{
}
现在创建上述内容的 HashMap,如下所示:
在 ScrollTableColumn 和 columnMap 中创建所有列时添加它们。
最后你可以得到所需的名称:
I have used something like this as an application column object.
public class ScrollTableColumn
{
}
Now create a HashMap of the above as follows:
Add all the columns as you create them both in the ScrollTableColumn and in the columnMap.
Finally you can get the required name as:
正确的方法是扩展基列类,这将允许您覆盖单元格渲染,通过构造函数传入列配置,最重要的是设置 DataStoreName,这是您应该存储列的字段名称的位置。最后,您不应该重用 onrangechanged 火灾,而应该通过覆盖它来直接访问列排序处理程序。范围更改和列排序处理程序应该调用某种类型的方法,您必须更新网格。为了理智起见,我将我的称为 updateGrid。这允许您将异步请求使用的任何网格参数设置为特定的排序列和方向。您想要使用列排序处理程序的主要原因是访问 ColumnSort 事件,该事件包含
扩展基本 GWT 列的列类的排序方向信息。您还可以扩展日期或数字列。
创建您的处理程序
您的排序事件类
updateDataList 是您用来向服务器端发出实际 AJAX 请求的方法。您应该将此信息存储在数据网格类的私有成员中,而不是记录日志,以便您的请求可以参数化它们。
您也可以使其适用于本地缓存,只需在本地从服务器复制数据,然后返回该缓存集合的排序集合,而不是调用 updateDataList 方法。
现在,您不需要只为字符串名称存储单独的列表,这会浪费内存,更不用说如果列顺序因用户交互或其他原因而更改,还会出现同步性问题。
The proper way is to extend the base column class which will allow you to override cell rendering, pass in column configuration via your constructor, and most importantly set the DataStoreName which is where you should store the field name for the column. Lastly you should not reuse the onrangechanged fire, but access the columnsort handler directly by overriding it. on range change and column sort handler should call some type of method that you have to update your grid. I call mine updateGrid for sanity. This allows you to set any grid parameters used by your async request to specific sort column and direction. The main reason you want to use column sort handler is to access the ColumnSort event which contains your sort direction information
your column class that extends the base GWT column. You can also extend date or number columns too.
create your handler
your sort event class
updateDataList is your method you use to make the actual AJAX request to your server side. rather then logging you sould store this info in private members of your datagrid class so that your request can parameterize them.
you could also make this work for local caching too, just make a copy of the data from your server locally then return a sorted collection of that cached collection, rather then calling the updateDataList method.
Now you do not need to store a separate list for just string names, which is waste of memory not to mention a synchronicity issue if the column order is change from user interaction or whatever.