yui2 datatable转换至yui3 (3)

 实际上到上文为止,我们已经得到一个可用的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的部分。因此一些调用代码的对应转换如下:

 

旧:

新:

 

 

从上面的比较来看,调用代码是相当类似。接下来就是不一样的地方了。对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方法的:

 

 

 

这样修改后。

 

dt_dynamicdata_clean.html又可以工作了。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值