实际上到上文为止,我们已经得到一个可用的DataTable。用稍微调整过的两个例子:

dt_dynamicdata_clean.html

dt_formatting_source.html

均可得到正确结果。画面不再截图。

接下来当然是往前再迈进。开始吸收yui3的部分。即:将原有的datasource抛弃,吸纳yui3的datasource

作为数据处理层。

首先,要做这个事情的原因:

1.原有的yui2 datasource ,对json采用自行解析的方式,代码相当冗余。可控性差。

2.其次当然是connection 要转成io。【上篇文章已经这么做了】

3.最后一点,就是yui3的时代,能砍掉的yui2部分就砍(这个纯属个人乐趣)

仔细观察yui3 的datasource例子后,我们可以发现,实际上构造语句是相当接近的。

而datatable,我只用到datasource-io的部分。因此一些调用代码的对应转换如下:

旧:

/*myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; myDataSource.responseSchema = { resultsList: "records", fields: [ {key:"id", parser:"number"}, {key:"name"}, {key:"date", parser:stringToDate}, {key:"price",parser:"number"}, {key:"number",parser:"number"} ], metaFields: { totalRecords: "totalRecords" // Access to value in the server response } };*/

新:

var myDataSource = new Y.DataSource.IO({source:"php/json_proxy.php?"});//new YAHOO.util.DataSource("php/json_proxy.php"); myDataSource.plug(Y.Plugin.DataSourceJSONSchema, { schema: { metaFields:{ totalRecords: "totalRecords" }, resultListLocator: "records", resultFields: [{key:"id"},{key:"name"},{key:"date"},{key:"price"},{key:"number"}] } });

从上面的比较来看,调用代码是相当类似。接下来就是不一样的地方了。对Schema的处理。

Schema处理,YUI3DS(DataSource,下文就简称DS)采用了不一样的编写策略。利用了Plugin方式。

看了这个Y.Plugin.DataSourceJSONSchema的应用模式后,对 YUI3的Plugin 应用场景有了明确的概念。

这个概念相当于AOP(面向方面)。在方法发生前,拦截,处理,再让 事件响应代码来处理,先人一步,杀人于无形。

由于yui3中plug方法没有做检测(检查参数有效性),因此要小心如忘记use了对应的module,导致一个无效的参数传入,

系统又不报错,加上plugin的工作模式又是躲在后面偷偷干,所以容易困扰(我就遇到那么一桩)。

我们放大来看Y.Plugin.DataSourceJSONSchema的工作流程。

datasource-io,request 发出去了

datasource-io,response返回了,走到success 的callback方法。

datasource-io,fire一个data事件!

DataSourceJSONSchema登场,拦截data事件响应代码【先于:_defDataFn执行】,解析了response.responseText,把值mix到事件对象中。然后再传递下去。

datasource,:_defDataFn开始执行,获得的事件对象已经包含了已解析后的数据。

如果把上述流程的蓝色字体部分抽走,代码会照常走下去,当然结果也是错误的,适时的时候无法取到 期望中的数据。

总结一下。Plugin的适用场合,就是AOP。当需要对一个已成型的类,进行扩充性的数据处理时,或是在处理模式上有不同的分支时,可考虑采用Plugin来解决问题

到这一步为止,DS是替换完毕了。但新的问题也接着来了。

YUI2 ,DataTable代码中,onDataReturnSetRows,onDataReturnUpdateRows等方法采用的接口是旧的。只有旧的DS才会按照这样的参数列表进行调用。此时要动用代码修改了。

原接口格式:

function(sRequest, oResponse, oPayload)

现接口格式(修改为:)

function(e)

上面三个形参,加上代码内文中的this,均可在e.callback/e 中找到。我是这样修改onDataReturnSetRows方法的:

onDataReturnSetRows : function(e) { var dt = e.callback.scope ; if((dt instanceof DT) && dt._sId) { var oRequest = e.request; var oResponse = e.response; var oPayload = e.callback.argument ; dt.fireEvent("dataReturnEvent", {request:oRequest,response:oResponse,payload:oPayload}); // Pass data through abstract method for any transformations var ok = dt.doBeforeLoadData(oRequest, oResponse, oPayload), pag = dt.get('paginator'), index = 0; // Data ok to set if(ok && oResponse && !oResponse.error && lang.isArray(oResponse.results)) { // Update Records if (dt.get('dynamicData')) { if (oPayload && oPayload.pagination && lang.isNumber(oPayload.pagination.recordOffset)) { index = oPayload.pagination.recordOffset; } else if (pag) { index = pag.getStartIndex(); } dt._oRecordSet.reset(); // Bug 2290604: dyanmic data shouldn't keep accumulating by default } dt._oRecordSet.setRecords(oResponse.results, index | 0); // Update state dt._handleDataReturnPayload(oRequest, oResponse, oPayload); // Update UI dt.render(); } // Error else if(ok && oResponse.error) { dt.showTableMessage(dt.get("MSG_ERROR"), DT.CLASS_ERROR); } } else { } },

这样修改后。

dt_dynamicdata_clean.html又可以工作了。

yui2 datatable转换至yui3 (3)相关推荐

  1. yui2 datatable转换至yui3

    网上有很多简便的方法,例如说 直接include进来就用啊. 我还是坚持在compat的基础上融合进来:不过说到完美程度,是不及完整理解yui3的类库后再重写.但是第一目标:可用,第二目标:自己看着舒 ...

  2. DataTable转换成IList

    本文转载自http://blog.csdn.net/chentaihan/article/details/6407284 作者:陈太汉     在用C#作开发的时候经常要把DataTable转换成IL ...

  3. C#将DataTable转换成list的方法

    本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary> /// 酒店评论列表-分页 /// </summa ...

  4. badatatable转成json_C# DataTable 转换成JSON数据 三种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List.DataTable转换为Json格式.特别在使用Extjs框架的时候,Ajax异步请求的数 ...

  5. 简单的反射 把datatable 转换成list对象

    /// <summary>/// 把datatable 转换成list对象/// </summary>/// <typeparam name="T"& ...

  6. Datatable 转换 Dictionary

    Datatable 转换 Dictionary DataTable dt = new DataTable();dt.Columns.Add("姓名");dt.Columns.Add ...

  7. C# DataTable 转换成ListT

    运用泛型和反射实现的转换,很给力.代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质.可以直接复制粘贴进行调用哦. public class DtConverToList<T> ...

  8. list lt t gt java_将DataTable转换成Listlt;Tgt;实现思路及示例代码

    前几天在工作中,遇到一个问题:需要将查询出来的DataTable数据源,转换成List的泛型集合(已知T类型).第一反应,我想肯定要用到"泛型"(这不是废话吗?都说了要转换成Lis ...

  9. C# DataTable转换成DataRow

    linq中的cast<T>()及OfType<T>() DataTable dt=...........//获取从数据库中取出的数据(假设只有一条记录)//Cast<T& ...

最新文章

  1. 【NCEPU】凌亮:Linux实践
  2. matlab 句柄图像尝试
  3. 动态规划解题套路框架
  4. linux云服务终端提示符显示-bash-4.2#解决方法
  5. java、sqlserver复习
  6. 在Spring + Hibernate中使用二级缓存配置步骤
  7. python28 excel读取模块xlrd
  8. Debian、Ubuntu源码编译制作安装包(二)
  9. Error:The module 'app' is an Android project without build variants, and cannot be built.
  10. Excel文件读取的两种方式
  11. c++局部对象是什么_什么是Java内部类?
  12. 简体中文原型设计工具对比
  13. WearOS 工具箱
  14. Android Fingerprint完全解析(一) :Fingerprint整体框架
  15. Vue 改变数据,页面不刷新的问题
  16. 【老生谈算法】matlab实现图像放大算法——图像放大算法
  17. python快乐数字怎么表达_Python中的快乐数字
  18. 【转】借助第三方支持https协议的存储实现自己网站上扫描二维码安装IOS APP
  19. 40w粉整700w活,一支恰饭作品让B站用户直呼“甲方赚了”
  20. 西瓜中视频是如何赚钱的?教你提高视频收益的3个方法!

热门文章

  1. 自然语言处理之词性标注
  2. oracle 6i,Oracle Reports 6i培训教程.doc
  3. 电脑快捷键和电脑磁盘清理
  4. ES2016/ES2017/ES2018/ES2019 新语法
  5. springMVC前后端数据交互
  6. request Headers字段详解
  7. Mac系统brew install 安装报错 Error: Failure while executing
  8. 微信小程序滑动scroll-view
  9. libsvm嵌入式移植
  10. 什么是阻抗匹配以及为什么要阻抗匹配