参考文章
http://www.sencha.com/learn/upgrading-from-sencha-touch-1x-to-2x/
http://www.sencha.com/learn/upgrading-to-sencha-touch-2-pr2/
http://docs.sencha.com/touch/2-0/#!/video/migrating-from-1-to-2
类系统(Class System)
在ST1.×里面,有两种定义类的方式:
1、使用Ext.extend
2、使用MVC提供的方法:regModel 和 regController
在ST2.×中,全部定义类的方式都只有 Ext.define
下面,举个从1.×升级到2.×定义类方式的例子:
Geo.views.BillSummary = Ext.extend(Ext.Panel, {
scroll: 'vertical' ,
html: "Loading..." ,
styleHtmlContent: true ,
initComponent: function () {
this .tpl = Ext.XTemplate.from( 'billsummary' );
Geo.views.BillSummary.superclass.initComponent.call( this );
},
getBill: function (bill) {
Geo.CongressService.getBillSummary({
bill: bill
}, this .onBillSummaryResponse, this );
},
onBillSummaryResponse: function (billSummary) {
if (Ext.isArray(billSummary.Paragraph)) {
this .update(billSummary);
} else {
this .update( 'No Bill Summary Available' );
}
}
});
|
在2.×中,我们要把上面的代码修改为:
Ext.define( 'Geo.view.BillSummary' , {
extend: 'Ext.Panel' ,
config: {
scroll: 'vertical' ,
html: 'Loading...' ,
styleHtmlContent: true
},
initialize: function () {
this .callParent(arguments);
this .tpl = Ext.Template.from( 'billsummary' );
},
getBill: function (bill) {
Geo.CongressService.getBillSummary({
bill: bill
}, this .onBillSummaryResponse, this );
},
onBillSummaryResponse: function (billSummary) {
if (Ext.isArray(billSummary.Paragraph)) {
this .setHtml(billSummary);
} else {
this .setHtml( 'No Bill Summary Available' );
}
}
});
|
总结一下修改的地方:
1、使用Ext.define 代替了 Ext.extend
2、把所有的类配置信息都放到了一个叫config的对象字面量中。
3、使用initialize方法替换了initComponent
在1.×中,只有Component类有initComponent方法,而在2.×中,所有的类都有initialize方法,在类实例化之前执行这个方法。
这里还要注意的是,我们再也不需要显式地调用Geo.views.BillSummary.superclass.initComponent.call(this);,执行父类构造函数用 this.callParent(arguments)
MVC
ST2.×的MVC架构基本上跟1.×是一样的,只是在一些语法上有细微差别,使到我们写出来的代码可读性和可测试性更强。
Models
Model类与ST2.×的其他类一样,config信息需要移到一个叫config的字面量中;Ext.regModel不再使用,而是用Ext.define去定义Models类。
例子:
Ext.regModel( 'MyApp.model.User' , {
fields: [
{name: 'name' , type: 'string' },
{name: 'age' , type: 'int' },
{name: 'alive' , type: 'boolean' , defaultValue: true }
],
validations: [
{type: 'presence' , field: 'age' },
{type: 'length' , field: 'name' , min: 2}
],
sayName: function () {
alert( this .get( 'name' ));
}
});
|
修改为:
Ext.define( 'MyApp.model.User' , {
extend: 'Ext.data.Model' ,
config: {
fields: [
{name: 'name' , type: 'string' },
{name: 'age' , type: 'int' },
{name: 'alive' , type: 'boolean' , defaultValue: true }
],
validations: [
{type: 'presence' , field: 'age' },
{type: 'length' , field: 'name' , min: 2}
]
},
sayName: function () {
alert( this .get( 'name' ));
}
});
|
总结一下升级步骤:
- 使用 Ext.define 替换 Ext.regModel
- 继承 Ext.data.Model
- 把配置移动到 config 块中
- 把定制函数留在config块以外 (例如上面的 sayName )
VIEWS
views没什么需要迁移的地方,只需要注意:类名尽量采用这样的命名方式:MyApp.view.SomeViewName
Application
你可以保留大部分定义 Ext.application的方式,例如:
Ext.application({
name: 'MyApp' ,
icon: 'resources/images/logo.png' ,
launch: function () {
Ext.create( 'MyApp.view.Main' );
}
});
|
这里,唯一新的用法是使用 Ext.create 去初始化应用。
这样的改变意义是:在1.×中,一般的做法实在Ext.application中定义全部的controller,和部分的model、view、model,其余的依赖分散在系统的各个地方,这样使到我们很难直观地了解到整个系统的结构。
在2.×中,官方建议把所有的东西都定义在Ext.application,例如这样:
Ext.application({
name: 'MyApp' ,
icon: 'resources/images/logo.png' ,
models: [ 'User' , 'Group' ],
controllers: [ 'Users' , 'Login' ],
views: [ 'Main' , 'Users' ],
stores: [ 'Users' ],
launch: function () {
Ext.create( 'MyApp.view.Main' );
}
});
|
Controllers
正如models和其他类一样,需要使用Ext.define替代Ext.regController 去定义Controller类。
例如:
Ext.regController( "searches" , {
showSomething: function () {
alert( 'something' );
}
});
|
在2.×,变成:
Ext.define( 'MyApp.controller.Searches' , {
extend: 'Ext.app.Controller' ,
showSomething: function () {
alert( 'something' );
}
});
|
在Applications中提到,如果Controller中有其他依赖的model, view 或者 store ,则要放到Application中定义。
Routes
在Sencha Touch 1.x中,一个Controller只是一堆可导向的方法的集合,但是在2.×中,Controller变得更主动,它可以定义自己的routes:
Ext.define( 'MyApp.controller.Searches' , {
config: {
routes: {
'search/:query' : 'doSearch'
}
},
doSearch: function (query) {
alert( 'searching for ' + query);
}
});
|
还有问题吗?
请到这里去看看有没有同样的问题吧,如果没有,发帖请教。
http://www.sencha.com/forum/forumdisplay.php?89-Sencha-Touch-2.x-Forums
相关推荐
Sencha Touch2发布.pdf
sencha.js sencha.csssencha.js sencha.csssencha.js sencha.css
Packtpub.Sencha.Touch.Cookbook sencha touch 教程 文字版,一共350页
Sencha.Touch.in.Action(2013.7)
Sencha Architect 2.x无限次使用教程 Sencha Architect 2是ExtJS和Sencha Touch的官方可视化IDE工具。最新版本是2.2,说是破解,其实是修改License来实现无限试用而已
2013+Sencha.Touch.2:Up.and.Running.pdf 一书各个章节的源代码,可直接放到web容器运行,用直接html5的浏览器打开,例子简单易懂。
本文通过对 Sencha Touch 框架的介绍,使读者对该框架有一定的了解,并通过一些代码示例给用户更详细直观的对 Sencha Touch 框架功能的了解。 ExtJS ExtJS 是为 web 开发人员提供的基于 JavaScript 和 web 标准快速...
sencha touch中文翻译文档,包含sencha touch入门基础和一些控件的使用说明
Sencha Touch 实战转曲.pdf 移动开发webapp.
Sencha Touch 2入门教程之MVC 讲解如何使用 Sencha Touch 2 mvc模式来开发一个登录界面
sencha touch 2 实现的贪吃蛇 希望对大家有所帮助
sencha-touch demo里面包含着基本常用的 phonegap-1.2.0.js index.html sencha-touch.css sencha-touch-all.js 等常用文件
sencha-touch下载
sencha touch 环境搭建 配置
sencha touch2移动开发框架,ajax获取数据
A demonstration of how the list view works in Sencha Touch 2.
sencha touch 折叠list
《SenchaTouch权威指南》同书源代码 本代码清单内包括本书全部资源文件与全部代码文件,其中内容如下所示: 1.第一章至第十四章下各子文件夹,以及第十五章的15-1、15-2、15-3子文件夹中均包含开发阶段使用的index-...
sencha touch cookbook 英文高清文字版 !