如何将dojo EnhancedGrid的过滤器定义转移到服务器端

Posted

技术标签:

【中文标题】如何将dojo EnhancedGrid的过滤器定义转移到服务器端【英文标题】:How can filter definition of dojo EnhanceGrid be transfered to server-side 【发布时间】:2011-05-20 08:19:26 【问题描述】:

我正在使用 dojox.grid.EnhancedGrid 的过滤器插件。它的介绍在http://dojotoolkit.org/reference-guide/dojox/grid/EnhancedGrid/plugins/Filter.html#dojox-grid-enhancedgrid-plugins-filter。

为了实现服务器端过滤器,它说:

"默认情况下,服务器端被假定为无状态(REST 风格)。在这种情况下,您应该将过滤器定义与存储的获取请求一起发送到服务器端。您可以通过以下方式执行此操作每次调用 store.fetch 之前修改请求对象。"

并给出了部分示例代码:

var grid = new dojox.grid.EnhancedGrid(
  id:"grid",
  store:"mystore",
  structure:"mystructure",
  plugins:
    filter: 
      isServerSide: true,
      setupFilterQuery: setupFilter
    
  
);
var setupFilter = function(commands, request)
  //the commands object here is the same as the POSTed commands object for stateful server, see below.
  if(commands.filter && commands.enable)
    //some filter is defined and valid. You can modify the request object here.
  else
    //no filter is valid.
  
;

从这个例子中,我仍然不知道如何将过滤器定义传输到服务器端。 commands.filter 是一个像树一样的 json 对象。它如何通过url参数传递到服务器端。谁能给我一些示例代码?

最好的问候 ZY

【问题讨论】:

【参考方案1】:

您可以使用 dojo.toJson 序列化整个过滤器定义并在服务器端对其进行评估 例如

request.query.filter=dojo.toJson(commands.filter);  

问候

【讨论】:

谢谢,dojo.toJson 正是我想要的。我的道场EnhancedGrid 基于QueryReadStore。代码如下:request.serverQuery = q: dojo.toJson(commands.filter); 你好。我发现 commands.filter 对象似乎不包含日期对象。用 Firefox 的调试器查看它,它似乎包含一个数字(内存地址?),它应该包含一个日期。你知道如何获取日期吗? 数字可能是代表日期的毫秒 - json标准中没有处理日期 @GerhardPresser 你能回答这个***.com/questions/45159531/…

以上是关于如何将dojo EnhancedGrid的过滤器定义转移到服务器端的主要内容,如果未能解决你的问题,请参考以下文章

Dojo EnhancedGrid 嵌套排序不起作用

Dojo - EnhancedGrid 未在第一次页面加载时显示

Dojo EnhancedGrid 和程序化选择

带有 IndirectSelection 的 dojox.enhancedGrid 中复选框的事件处理程序

没有为 dojo 的 DataGrid 触发事件

dojox.grid.EnhancedGrid 如何设置 noDataMessage?