Board logo

标题: Dojo 日期控件的国际化和集成(4) [打印本页]

作者: look_w    时间: 2018-8-10 21:39     标题: Dojo 日期控件的国际化和集成(4)

与后台系统的集成通过以上对 Dojo 日期控件国际化支持的介绍,我们知道 Dojo 作为一种流行的 Javascript 开源框架,其对日期国际化的支持非常强大。目前的很多 Web 应用都是基于 Dojo 来实现日期的国际化。但不是每个后台的系统对日期国际化的支持都是那么强大,有些后台系统可能对日期国际化的支持比较有限,这时如果需要将 Dojo 和这些后台系统进行集成来支持日期国际化的时候,就需要我们做一些额外的开发工作。这里我们以 IBM 的 DB2 Content Manager 来举例说明 Dojo 如果和跟后台系统进行集成,同时我们也给出一些集成方面的开发技巧。
IBM DB2 Content Manager 对日期国际化的支持:
DB2 Content Manager 是建立在 DB2 Universal Database™ 存储过程基础上的内容储存库,利用了 IBM WebSphere Application Server 提供的内容检索和安全性以及 Tivoli® Storage Manager 提供的对象迁移及备份与恢复。 CM 可作为结构化和非结构化数据的企业储存库用来存储任何格式的文档。 DB2 Content Manager 支持内容国际化 (Globalization),但是对日期类型的国际化支持的并不是很好。比如,对于 Date 类型的数据,CM 要求其格式必须是 yyyy-MM-dd 。 如果某一个国家默认的日期格式是 MM-dd-yyyy,这种格式的日期数据是没法保持到 CM 中的,唯一的办法是将其它日期的格式转成 yyyy-MM-dd 格式,然后再进行保存。下面列出 CM 支持的日期格式:
清单 13. CM 支持的日期格式TypeFormatDateyyyy-MM-ddTimeHH.mm.ss 或 HH:mm:ssTimestampyyyy-MM-dd-HH.mm.ss.SSSSSS
或 yyyy-MM-dd HH:mm:ss.SSSSSS
通过以上对 CM 支持的日期格式的分析,我们可以得出结论:对于要保存到 CM 的日期数据需要先进行格式转化,然后再保存。在使用 Dojo 作为前台,CM 作为后台的 Web 应用程序开发中,Dojo 在前台 Web 页面对日期国际化的支持非常强大,因此需要在 Dojo 日期控件把日期传到后台 CM 时先把日期转成 CM 能够支持的格式,流程图如下:
图 7. Dojo 和 CM 日期转换流程图通过上面的流程图我们可以清楚的知道,在 Dojo 日期控件向 CM 传送日期数据之前需要对日期进行格式转换,下面针对 Date、Time、Timestamp 三种类型的数据分别介绍如何进行日期转换:
Date
清单 14. Date 类型转换代码
1
2
3
4
5
6
7
8
dojo.declare("MyDateTextBox",[dijit.form.DateTextBox],{
    serialize: function(d, options) {
        return dojo.date.locale.format(
            d, {selector:'date',
                datePattern:'yyyy-MM-dd',
                timePattern:'HH:mm:ss'}).toLowerCase();
    },
});




说明:定义自己的 dojo Date 控件,需要继承 dijit.form.DateTextBox (Dojo 中默认的 Date 控件 ) ;
重载 dijit.form.DateTextBox 中的 serialize 方法:指定当前控件的类型为 date (selector: ’ date ’),将控件中的 Date 值转成 yyyy-MM-dd 格式。
Time
清单 15. Time 类型转换代码
1
2
3
4
5
6
7
8
dojo.declare("MyTimeTextBox",[dijit.form.TimeTextBox], {
    serialize: function(d, options) {
        return dojo.date.locale.format(
            d, {selector:'time',
                datePattern:'yyyy-MM-dd',
                timePattern:'HH:mm:ss'}).toLowerCase();
    },
});




说明:定义自己的 dojo Time 控件,需要继承 dijit.form.TimeTextBox (Dojo 中默认的 Time 控件 ); 重载 dijit.form.TimeTextBox 中的 serialize 方法 : 指定当前控件的类型为 time (selector: ’ time ’), 将控件中的 Time 值转成 HH:mm:ss 格式。
Timestamp
清单 16. Timestamp 类型转换代码
1
2
3
4
5
6
7
8
dojo.declare("MyTimestampTextBox",[dijit.form.TimeTextBox], {
    serialize: function(d, options) {
        return dojo.date.locale.format(
            d, {selector:'datetime',
                datePattern:'yyyy-MM-dd',
                timePattern:'HH:mm:ss'}).toLowerCase() + ".000000";
    }
});




说明:定义自己的 dojo Timestamp 控件,需要继承 dijit.form.TimeTextBox (Dojo 中默认的 Time 控件 ); 重载 dijit.form.TimeTextBox 中的 serialize 方法 : 指定当前控件的类型为 datetime (selector: ’ datetime ’), 将控件中的 Timestamp 值转成 yyyy-MM-dd HH:mm:ss.SSSSSS 格式 , 本例中将最后的六位微秒统一置为 0, 因为在平时的应用中基本不会使用到后面的微秒, 当然也可以根据实际的需要置成不同的值。
总结Dojo 是一个功能丰富,易于扩展的 JavaScript 工具包,同时提供了面向对象的编程模式。本文主要介绍了 dijit 包下的日期控件,对其框架结构,使用方式,扩展点都作了详细介绍。通过本文的学习相信可以使您在项目中熟练的使用 dojo 日期控件,同时在学习使用其他 dojo 控件时,也为您提供了很好的学习思路。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0