官网 Ext direct包中.NET版的问题

主要问题在返回的结果 result 标记对应的数据是字符串,请看以下官方例子中返回的数据:


代码如下:

{"type":"rpc","tid":2,"action":"Sample","method":"SaveForm","result":"{\"firstName\":\"4\",\"lastName
\":\"4\",\"age\":4}"}

“ result ”标记对应的是一个字符串,而不是对象,这就需要在处理数据时先要将字符串转换成 JSON 对象才能继续处理。这会造成使用 DirectStore 作为 Grid 数据源时取不到数据的问题。在官网论坛找了一下,有个例子是重写 Ext.data.DirectProxy 的 createCallback 方法实现的,其目的就是在获取到数据后,将 result 中的数据转换为对象再返回数据。以下是重写 createCallback 方法的代码:


代码如下:

Ext.override(Ext.data.DirectProxy, {
createCallback: function(action, reader, cb, scope, arg) {
return {
callback: (action == 'load') ? function(result, e) {
if (typeof result == 'string') {
result = Ext.decode(result);
}
if (!e.status) {
this.fireEvent(action + "exception", this, e, result);
cb.call(scope, null, arg, false);
return;
}
var records;
try {
records = reader.readRecords(result);
}
catch (ex) {
this.fireEvent(action + "exception", this, e, result, ex);
cb.call(scope, null, arg, false);
return;
}
this.fireEvent(action, this, e, arg);
cb.call(scope, records, arg, true);
} : function(result, e) {
if (typeof result == 'string') {
result = Ext.decode(result);
}
if (!e.status) {
this.fireEvent(action + "exception", this, e);
cb.call(scope, null, e, false);
return;
}
this.fireEvent(action, this, result, e, arg);
cb.call(scope, result, e, true);
},
scope: this
}
}
});

例子可以到以下地址下载: http://xiazai.jb51.net/200906/yuanma/Direct.rar
不过笔者的想法是能不能在服务器端解决这个问题。在 Ext.Direct.dll 的源代码中,笔者找到 DirectResponse 类的“ Result ”的定义类型是一个 object ,于是笔者在例子中将客户端调用的方法的返回数据类型修改为 JObject ,但是在执行以下语句的时候会出现错误:
return JsonConvert .SerializeObject(response);
看来这里需要修改一下,于是笔者将 DirectProcessor 类中的以上这句修改为以下代码:


代码如下:

if (response.Result.GetType().ToString() == "Newtonsoft.Json.Linq.JObject" )
{
JObject o = new JObject (
new JProperty ("type" ,response.Type),
new JProperty ("tid" ,response.TransactionId),
new JProperty ("action" ,response.Action),
new JProperty ("method" ,response.Method),
new JProperty ("result" ,(JObject )response.Result)
);
return o.ToString();
}
else
{
return JsonConvert .SerializeObject(response);
}

其作用就是如果“ Result ”属性中的数据是“ JObject ”对象,程序就重新构造一个 JObject 对象再组合成字符串返回,如果不是就按原方法返回。
在客户端调用方法中只要返回一个 JObject 对象就可以了,例子如下:


代码如下:

[DirectMethod ]
public object GetGridDatas()
{
JArray ja = new JArray ();
for (int i = 0; i < 2; i++)
{
ja.Add(new JObject (
new JProperty ("id" ,i),
new JProperty ("title" ,"title" +i.ToString())
));
}
JObject o = new JObject (
new JProperty ("results" , 2),
new JProperty ("rows" , ja)
);
return o;
}

(0)

相关推荐

  • 官网 Ext direct包中.NET版的问题

    主要问题在返回的结果 result 标记对应的数据是字符串,请看以下官方例子中返回的数据: 复制代码 代码如下: {"type":"rpc","tid":2,"action":"Sample","method":"SaveForm","result":"{\"firstName\":\"4\",\&

  • 如何从官网下载Hibernate jar包的方法示例

    学习Hibernate需要用到源码和jar包,去网盘找往往不能找到自己需要的版本,csdn里面有但是很多需要积分,更过分的是花了积分有时候下载的也是一个记事本--里面写着Hibernate的官方下载地址!!!是可忍,孰不可忍! 奈何Hibernate是英文网站,很多人不知道怎么用,怎么下载源码与jar包. 第一步:打开官网:http://hibernate.org Hibernate官网 选择Hibernate ORM,点击more按钮 在Releases模块中,进行版本的选择,选择最新的稳定版

  • Spring官网下载各版本jar包的方法

    1:浏览器输入官网地址:http://spring.io/projects 2:点击如图树叶页面按钮. 3:点击如图小猫图片按钮. 4:查找downloading spring artifacts 链接点击. 5:查找Manually downloading Spring distributions 下面的 http://repo.spring.io.链接点击. 6:鼠标点击左边>>符号展开菜单选择Artifacts选项. 7:选择子菜单下的libs-release-local 选项. 8:依

  • Linux下Docker CE使用从包中安装的方式详解

    使用从包中安装的方式,在Linux上安装Docker CE 1.查看Linux系统信息nuame -a 我的是Debian, amd64 2.查看Linux 系统发行版的名称 lsb_release -cs 我的是stretch 3.进入到下载包页面https://download.docker.com/linux/ 第一步获取的Debian,点击进入debian>dists 进入了这个连接地址 https://download.docker.com/linux/debian/dists/ 第二

  • 下载官网python并安装的步骤详解

    怎么下载官网python并安装? Python火了起来,很多人开始学习起来了,那么Python安装包,去哪里下载呢.那当然是去官网咯. Python官网或直接 访问 https://www.python.org/ 看到上图显示官网的没,点击进入. 把鼠标移到downloads上,然后看到下拉选项,点击Windows. 然后看到如下界面. 这么多的安装包,该选那个呢.下图画圈的是版本号,往下拉,还有很多,看自己需要的选择版本. 版本选好之后,就要选择具体的什么类型的安装包了. 这里,我们以最新版的

  • Jupyter安装拓展nbextensions及解决官网下载慢的问题

    Anaconda Jupyter安装拓展nbextensions 先在终端pip两个包: Pip install jupyter_contrib_nbextensions Pip install jupyter_nbextensions_configurator 安装成功后 Jupyter contrib nbextension install --user Pip install jupyter_contrib_nbextensions Pip install jupyter_nbextens

  • JavaScript仿小米商城官网完整页面实现流程

    目录 一.首页的制作 1.下载APP的制作 2.导航栏的制作 3.轮播图的制作 二.登录.注册页面的制作 1.盒子布局 2.复选框样式更改 三.页面跳转 不知不觉学习前端已经快4个月啦,之前没学JavaScript之前做的项目都只能看不能玩,小米官网这个页面算上写出的第一个相对完整一点的项目,虽然需要进步的地方还有很多,但是未来可期! 本篇博客主要是针对在书写这个项目时遇到的一些问题,找出对应的方法,记录一下自己在写这个项目时踩过的坑. 一.首页的制作 首页的主要效果有如下几个: 下载APP.购

  • 关于SpringBoot简介、官网构建、快速启动的问题

    目录 SpringBoot概述 起步依赖 探索父工程 探索依赖 小结 程序启动 切换web服务器 spring与springboot的对比 官网构建工程 进入SpringBoot官网 选择依赖 生成工程 SpringBoot工程快速启动 问题引入 打包 启动 SpringBoot概述 SpringBoot 是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程. 大家已经感受了 SpringBoot 程序,回过头看看 SpringBoot 主要作用是什么

  • js仿小米官网图片轮播特效

    小米官网给我的感觉是大气.干净.很多特效的加入让人觉得耳目一新,big满满. 看到他们首页的轮播图实现挺有意思,于是自己模仿着写了一个. 大致的感觉出来了,贴个图先: 通过前端神器chrom的F12观察小米官网的html代码,不难看到他们使用5个div包裹图片并使用了定位通过z-index来控制div层级,通过控制每个div的opacity属性和display属性进行元素的显示.隐藏. 截图如下(红框内的opacity属性): 好的,实现的手段知道了,那么页面布局先搞出来. <!DOCTYPE

  • ExtJS下 Ext.Direct加载和提交过程排错小结

    偶泪滴嘎嘎,终于,终于完成了一部分ExtJS. (基础夯实一点,会有好处的,排错的时候就体现出来了) 下面就Ext.Direct做一些排错笔记: 错误一: 复制代码 代码如下: 严重: StandardWrapper.Throwable java.lang.ArrayIndexOutOfBoundsException: 1 at com.softwarementors.extjs.djn.api.RegisteredStandardMethod.isValidFormHandlingMethod

随机推荐