原文:http://www.sencha.com/blog/ext-scheduler-2-0-upgrading-to-ext-js-4/

在上一篇文章《I introduced you to the Ext Scheduler》中,我介绍了ExtJS的Scheduler(日程)组件和资源。在Bryntum,我们正忙着将其升级到基于ExtJS 4.0的版本。借此机会,升级后的日程和甘特图组件将会进行重构,以便兼容ExtJS 4。

在前一版本,组件的及格关键部件依赖于LockingGridView、ColumnHeaderGroup、最大化的TreeGrid和Saki的Ext.ux.form.DateTime等几个扩展。在ExtJS 4中,已包含这些功能,因而,我们很高兴看到我们的组件现在是100%基于Sencha支持的代码。以下是一个使用新的TreePanel开发的2.0版日程组件的外观。

了解ExtJS GridPanel和TreePanel

GridPanel在ExtJS 4中或多或少被重写了。ExtJS 3版本的Grid对于简单的应用效果很好,如果结合了多种功能,效果就不是太好了,如尝试结合锁定列、分组行和分组标题等功能。在前一版本,Bryntum为了在GridView中实现这些功能配置,着实头疼了一番,结果就是导致了很多的重复代码。为了扩展GridView以实现日程功能,我们不得不为视图类型的所有组合都单独定义一个视图类,从而导致了一些比较容易混淆的类名,如Sch. LockingGroupingSchedulerView。此外,还需要使用使用Grid,通过EditorGridPanel实现内联单元格编辑。

在ExtJS 4,只需要在GridView和TreeView中混入特定的功能,就可以实现不同的视图,从而可轻松的实现日程的API。这最大限度的减少了重复代码,并使代码维护工作多了一些乐趣。

另外一个相当不错的是,锁定Grid现在是由三个独立的面板组成:一个包含两个子GridPanel(或TreePanel)的GridPanel。

现在,用户可以单独对左边或右边的Grid进行定义。在第一个截图,锁定的TreePanel被定义为可折叠,且里面的面板使用了Border布局代替了默认使用的HBox布局,下面是一个简单示例代码:

var tree = Ext.create('Sch.panel.SchedulerTree', { title : 'Airport departures', width : 900, height : 400, layout : 'border', schedulerConfig : { header : false, region : 'center' }, lockedGridConfig : { header : false, split: true, width : 200, region : 'west', collapseDirection : 'left', collapsible : true }, …
      许多用户都要求锁定Grid是可折叠,因此,我们很高兴通过小小的努力添加了这个功能。此功能如果要在ExtJS 3中通过扩展LockingGridView实现,很困难,这需要编写大量代码和增加代码维护的负担。

另外一个频繁被要求的功能是,可翻转水平视图,以显示水平轴的资源和垂直轴的时间。在ExtJS 4,这功能很容易就添加到2.0版了。

从ExtJS 3升级的工作

将组件升级到ExtJS 4自然需要相当多的工作,这与你在ExtJS类基础上添加添加标记和功能创建自定义组件大不相同。如果只是简单的重写内部方法和使用没有文档的类成员,那会存在很大的问题,因而,升级之旅是从一块块代码,一个个类开始的。而且,没有适当的测试,也很难验证出升级后的类是否成功。做Javascript单元测试和UI行为调试相当的困难,尤其是在一个类依赖于其它类和应用状态的时候。在升级工作进行到一般的时候,我们意识到,我们迫切需要通过单元测试来验证现有API和功能是否都已实现。因此,我们使用了在过去两年间创建和优化的JS单元测试工具Nickolay Platonov来测试ExtJS应用。

以测试驱动开发方式开发我们的ExtJS代码改变了我们的工作方式,我买你新的代号为“Siesta”的测试工具帮了我们大忙,它确保了未知的中断代码。很感谢PhantomJS,可以让我们的测试成为持续集成过程的一部分。如果你想尝试一下beta版本,请在在德克萨斯州奥斯汀即将召开的SenchaCon大会与我们联系。

所有日程部件更新完成后,我们进行最后的渲染和交换工作。在这里,我们注意到在ExtJS 4支持类的动态加载,而这要求类名和目录结果必须遵循一些约定,这迫使我们要重新考虑如何使用一种清晰的方式架构和组合这些类,以便转换后的代码支持动态加载。对于每个类,我们不得不通过requires数组明确指出它依赖那些类。不过,只要表达清晰,要找这些依赖类也不难。额外的好处是,在调试时使用动态加载非常节省时间,这是因为不再需要在一个单一的JS文件内搜索代码了。如果你还没开始使用动态加载,我们强烈建议你这么做,因为这可节省大量的时间。

总结

升级到ExtJS 4,对我们来说,是一个挑战,因为Grid在ExtJS 4被重写了,而日程是使用Grid作为基类的。在使用新的树功能是我们也碰到一些小麻烦(主要是CRUD操作方面的)。但是,我们通过重写部分代码理清了这些问题。不过,在这方面的改善是非常受欢迎的。回想起来,升级到新的ExtJS版本的努力是超值的,这让我们在新平台上重构代码的基础也成熟了许多。接下来,我们将进一步将组件移植到Sencha Touch 2.0,我们非常期待他的发布。

附加资源:

演示地址:Ext Scheduler 2.0

PhantomJS的相关信息

Sencha Forum

作者:Mats Bryntse
Mats has been active in the Ext JS community for the past four years and started two Ext JS user groups in both San Francisco and Malmö. Currently Mats is running his own company Bryntum, which creates advanced extensions for Ext JS and Sencha Touch. In his spare time Mats enjoys badminton and skiing.

转载于:https://www.cnblogs.com/wdpp/archive/2011/09/27/2386468.html

Ext Scheduler(日程表) 2.0——升级到4.0相关推荐

  1. 记selenium1.0升级到selenium2.0

    前阵子因为要进行支持多浏览器的自动化测试,原来selenium1.0仅支持到firefox3.6,IE8,chrome4的版本,而公司GA数据显示用户多使用IE9,Firefox20,chrome26 ...

  2. WSS2.0升级到WSS3.0

    WSS2.0升级到WSS3.0的过程: 1.检查服务器上面是否安装.Net Framework3.0(必须要安装的). 2.安装WSS3.0(安装后别做配置) 选择第一项(逐步升级),默认的是第二项( ...

  3. Oracle10.2.0.1.0升级Oracle10.2.0.2.0补丁安装指南(转载)

    Oracle10.2.0.1.0升级Oracle10.2.0.2.0补丁安装指南 Oracle数据库学习之路 2008-07-25 11:35:12 阅读5 评论0 字号:大中小 一.安装数据库 先安 ...

  4. Spring Boot 从1.0 升级到 2.0 所踩的坑

    先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cloudfavorites/favorites-web)目前在 Github 上面 ...

  5. Finereport 9.0升级到10.0工具下载[9-10升级工具]

    QQ192374926 1. 描述 现提供一个独立的辅助升级程序,可以将 9.0 的 Web 工程升级到 10.0 工程,包括 JAR 包.各类配置文件.FineDB 数据表等的兼容升级. 注:支持 ...

  6. Spring Boot 1.0 升级到 2.0 的时候遇到一些问题

    将云收藏从 Spring Boot 1.0 升级到 2.0 的时候也遇到了一些问题,在修改的过程中记录下来,今天整理一下分享出来,方便后续升级的朋友少踩一些坑. 1.第一个问题:启动类报错 Sprin ...

  7. 初次Android 6.0升级Android 8.0的心酸总结

    前置条件 1.需要先确定你要升级的Android版本(这里我是从6.0升级到8.0,也就是compileSdkVersion从23升级到26),无论是升级到什么版本,你的AS都至少需要升级到3.0以上 ...

  8. web3.0 升级到webpack5.0 以及兼容IE处理

    如果你的事vue-cli  或者其他cli 关于IE 兼容不具有什么参考价值.如果是react 项目,你看看就行. webpack3的打包速度已成为诟病,所以我们将原来的webpack3升级至webp ...

  9. 127.0.0.1 myz.php,附录 – 1.0升级到2.0注意事项 - GatewayWorker 2.x 3.x 手册

    如何知道自己使用的版本是1.0还是2.0 打开文件 GatewayWorker/Gateway.php,查看是否有常量VERSION,并且常量值大于等于2.0.0 class Gateway exte ...

最新文章

  1. 去伪存真,更多区块链落地应用即将涌现
  2. webservice 简介 跨编程语言 跨操作系统 远程调用技术
  3. Android studio 中引用jar的其实是Maven?(一)
  4. 关于MSSQL数据存储的问题
  5. Linux 中yum的配置
  6. 搞定所有的跨域请求问题
  7. 阿里云移动端播放器高级功能---截图和音频波形 1
  8. 图片在mysql中的储存_如何在MySQL中直接储存图片
  9. java文件处理:文件流、上传、下载
  10. 香港十大外汇交易平台排名(2021最新版)
  11. 一文整理总结常见Java后端面试题系列——Spring篇(2022最新版)
  12. 职业学校计算机教学总结报告,中职计算机教师教学工作总结(共6篇) .docx
  13. 卖减肥产品怎么正确引流?减肥产品抖音应该如何引流?
  14. ad 报错Minimum Solder Mask Sliver
  15. rails gem devise
  16. 开发效率不高?墙裂推荐这十款精选IntelliJ Idea插件
  17. 昔人已乘黄鹤去 此地空余黄鹤楼-崔颢
  18. 让微信公众号自动回复可以跳转小程序的消息
  19. 电子商务网站的建设及发展趋势
  20. 用数组来写兔子繁衍问题C语言

热门文章

  1. [spring]用IEDA创建spring boot项目
  2. django前后端数据交互
  3. EVERTEC是如何利用大型机帮客户省钱?
  4. DevOps:软件架构师行动指南2.2 云的特性
  5. sqlmap的篡改绕过WAF
  6. Jira中的BUG导出
  7. int main():声明指定了两个以上的数据类型
  8. ASP.NET2.0服务器控件之自定义状态管理
  9. 正则表达式入门30分钟——很经典的入门教材
  10. Spring 5 新功能:函数式 Web 框架