升级到 ExtJS 5的过程记录

 

最近为公司的一个项目创建了一个 ExtJS 5 的分支,顺便记录一下升级到 ExtJS 5 所遇到的问题以及填掉的坑。由于 Sencha Cmd 的 sencha app upgrade 命令无法正常地讲项目升级至 ExtJS 5 (或许是方式不对) ,所以我的做法是新建一个 ExtJS 5 的项目,然后把 app 包拷贝过去,然后慢慢修复报错的东西,直到项目可以正常跑起。

说在前面:

升级的项目目前是一个十分初级的版本,代码量很少,只有导出报表和 dashboard 功能,主要是 Charts 的东西,并 涉及到 Grid 和 Tree 的使用,所以本文更多的是讲 ExtJS 5 Charts 部分的东西(变化的)。

升级到 ExtJS 5 过程中遇到的问题以及修复方式

## Uncaught Error: “Ext.util.Observable#addEvents” is deprecated.

addEvents 方法已经被移除。现在可以直接接收 fireEvent 自定义的 Events,不需要事先 addEvents。
但是代码内不能存在 addEvents 方法,否则会报错。

## [E] Ext.data.reader.Reader: Using the deprecated “root” configuration. Use “rootProperty” instead.

store 内的 ‘root’ 属性替换为 ‘rootProperty’

## Ext.LoadMask 无法正常工作

ExtJS 5 中,Ext.LoadMask 已经无法直接作用(target)于 Ext.getBody() ,如果要作用于 Ext.getBody() , 那么可以使用Ext.getBody().component

例子:

app.genWditingMask = new Ext.LoadMask( Ext.getBody().component, {
msg:"Generating report, please wait!"
});
## Invalid component “itemId”: “6-month-trend-at-standard”

itemId 不再支持数字开头。 ‘6-month-trend-at-standard’ – > ‘six-month-trend-at-standard’

## Ext JS Trial

ExtJS 在 Trial 版中加入了 Ext JS Trial 标识。这是使用 CSS after 伪类来显示的,所以我们只能通过修改 theming 来消除这些标志。

不仅如此,Trial 版的 tabpanel 的 tab title 无法显示(字体颜色和背景色一样)。

暂时不知道 Trial 版里面还有没有其它限制和问题,请购买 License 并下载完整的 ExtJS 5。(一般使用 ExtJS 的都是企业级应用,请购买 License 。避免法律上的风险)。

Extjs charts / Sencha charts

正如文章的开头所讲,这个项目主要是 charts 方面的东西,所以我把这一 part 单独列出来讲。 首先要说的是 ExtJS 5 中 Charts 的变化:

1. 不再默认引入进 ExtJS Src ,而是作为一个 package 的方式引入项目(开源协议的改变)

2. ExtJS 5 中,存在两个 charts ,分别是 extjs-charts 和 sencha-charts

extjs-charts 是 ExtJS 4 中用到的 charts 包,兼容老项目和旧的浏览器,不会有新的功能出现
sencha-charts 是 ExtJS 5 和 Sench Touch 的一个融合版, 为触屏设备做优化,并且只兼容 IE 8 +,性能比较好,会持续新增新功能
extjs-charts 比 sencha-charts 成熟,在细节方面处理得更好,extjs-charts 以后只作为 fallback 用,Sencha 官方已经不会再新增功能和做性能优化
3. extjs-charts 和 sencha-charts 不能同时在一个项目中使用

4. sencha-charts 有很多地方与 extjs-charts 不同,代码可能需要修改

5. sencha-charts 在新型浏览器中使用 Canvas 来绘制图表,在 IE 8 中使用 SVG ,而 extjs-charts 则都是使用 SVG 来绘制。

6. sencha-charts 引入了 charts 的动画交互效果以及 3D PIE 等新的功能。

下面是我在升级的过程中遇到的问题的一些记录和解决方案(从 extjs-charts 移植到 sencha-charts):

## GET xxx/ext/src/chart/Chart.js 404 (Not Found)

ExtJS 5 中 Chart 作为 packages 引入项目,而不作为默认的组件。
修改 app.json, requires 内加入 “ext-charts”,如:

"requires": [
"sencha-charts"
]
然后运行

sencha app refresh
sencha app build
进行刷新以及打包(要确保项目可以打包成功,可以先注释掉我们的代码)

注意,关于 ext-charts 和 sencha-charts 的区别:

ext-charts 是原 ExtJS 4.x 时候的图表组件,使用方式和原来的一样,使用 Ext.chart.Chart 。不再增加新的功能,仅作为兼容。


sencha-charts 是 ExtJS 5.x 的图表组建,运用于 ExtJS 5 和 Sencha Touch,针对触屏界面做优化,未来会加入新功能(推荐使用)。
sencha-charts 移除了 Ext.chart.Chart ,请使用 Ext.chart.CartesianChart (xtype: cartesian)代替

注意: ext-charts / sencha-charts 不能同时使用,否则会出错。
另外,目前的 ExtJS 5 官方 API 文档里面的 charts 部分还参杂着 Ext-charts 的东西,导致一些混乱。

## Unhandled Exception: [Ext.createByAlias] Unrecognized alias: axis.Numeric

sencha-charts 的 axes 的 type 属性的值,不再支持首字母大写的形似,只能首字母小写。将 Numeric 修改成 numeric 即可。其余的 type 同理。(ext-charts 支持首字母大小写都可以)

## Unhandled Exception: [Ext.create] Unrecognized class name / alias: series.column

sencha-charts 的 series.column 已经被移除,请使用 series.bar 代替。转换 bar / column 需要 flipXY 属性来进行配合。

## Chart 所有 mouseover 效果失效(包括高亮, tooltip)

请为 Chart 添加 interactions 属性(自己参考官方文档)。
interactions: ‘itemhighlight’

## Chart 内不显示 tooltip

将 tips 属性名修改成 tooltip ( ext-charts 使用 tips, sencha-charts 使用 tooltip)

## Pie 无法正常显示

Pie 的容器不是 Ext.chart.CartesianChart 和 Ext.chart.Chart, 而是 Ext.chart.PolarChart。
Pie 的 store 必须有默认值,否则就算 store.loadData 后也无法正常显示(应该是 sencha-charts bug)

最后

目前的升级,只是为代码进行移植修复,把 extjs-charts 移植成 sencha-charts ,并没有使用 ExtJS 5 的其它新的东西,比如 MVVM 模式。那么接下来我会持续重构这个分支,采用 MVVM 模式来处理,到时候会写新的文章来做技术分享。

由于项目是公司的,这里就不分享截图了。

感谢阅读。

作者: lingyired
原文: http://lingyi.red/upgrade-to-extjs5

升级到 ExtJS 5的过程记录的更多相关文章

  1. 升级Windows 10 正式版过程记录与经验

    升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...

  2. CentOS 5.5 下安装Countly Web Server过程记录

    CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...

  3. 升级 Elasticsearch 集群数量实战记录

    搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...

  4. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  5. 双系统Ubuntu分区扩容过程记录

    本人电脑上安装了Win10 + Ubuntu 12.04双系统.前段时间因为在Ubuntu上做项目要安装一个比较大的软件,导致Ubuntu根分区的空间不够了.于是,从硬盘又分出来一部分空间,分给Ubu ...

  6. linux-i386(ubuntu)下编译安装gsoap_2.8.17过程记录

    过程记录 :  1.下载gsoap_2.8.17.zip 并 解压 : $unzip gsoap_2.8.17.zip     2.进入解压后的目录gsoap-2.8   3.自动配置编译环境:  $ ...

  7. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  8. Ubuntu14.04 Tomcat 安装过程记录

    Ubuntu14.04 Tomcat 安装过程记录 检查java的版本 zhousp@ubuntu:~$ sudo java -version [sudo] password for zhousp: ...

  9. mercurial(Hg) Server 搭建 过程记录

    mercurial(Hg) Server 搭建 过程记录 1.  环境说明 只是测试搭建,环境为本机开发环境:win 8.1 + IIS8.5 软件准备: 2.  软件安装 先安装Python2.7, ...

随机推荐

  1. 我爆一个托 QQ305242038 电话 18782169971

    这是两个人,一品天下附近的托,qq负责聊天,电话那个负责见面

  2. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

  3. cmake,gtest单元测试程序

    参考:http://blog.csdn.net/stdcoutzyx/article/details/8284183 PROJECT (HELLO) SET(SRC_LIST main.c) MESS ...

  4. HTTP协议-标签简介

    这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这 ...

  5. wap开发笔记之幻灯片

    最近在进行wap站研究,发现网上成熟的wap幻灯片都很难找到,在此贴出一个iphone的幻灯效果,希望对wap站开发的人有些帮助. 点此下载

  6. 如何用angularjs制作一个完整的表格之三__在ng-repeat中使用ng-model

    在ng-repeat中使用ng-model时会有许多问,有的人碰到无法获取绑定的数据内容,有的人遇到改动绑定的数据内容时所有循环生成的内容一起改变.上面的问题我在开发时也遇到过,但是解决后我却怎么也还 ...

  7. 安装 SQL Server 2005 的硬件和软件要求(官方全面)

    SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...

  8. Servlet 的由来和实现过程

           Servlet 是在服务器上运行的小程序.这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果 ...

  9. jquery.inputmask.js 输入框input输入内容格式限制插件

    今天使用的就是这几行代码. 利用 jquery.inputmask.js  下载地址(如果打不开的话 请FQ http://plugins.jquery.com/jquery.inputmask/) ...

  10. C# 两时间,时间间隔

    #region 返回时间差        public static string DateDiff(DateTime DateTime1, DateTime DateTime2)        {  ...