`

[翻译]从Sencha Touch 1.* 升级到 Sencha Touch 2.*

阅读更多

参考文章

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);
    },
  
    /**
     * Get the billSummary and update the contents of the panel.
     */
    getBill: function(bill) {
        Geo.CongressService.getBillSummary({
            bill: bill
        }, this.onBillSummaryResponse, this);
    },
  
    // private
    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');
    },
  
    /**
     * Get the billSummary and update the contents of the panel.
     */
    getBill: function(bill) {
        Geo.CongressService.getBillSummary({
            bill: bill
        }, this.onBillSummaryResponse, this);
    },
  
    // private
    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'));
    }
});

总结一下升级步骤:

 

  1. 使用 Ext.define 替换 Ext.regModel
  2. 继承 Ext.data.Model
  3. 把配置移动到 config 块中
  4. 把定制函数留在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

0
0
分享到:
评论

相关推荐

    api.zip_sencha _sencha touch api_sencha touch2 api

    Sencha Touch 2是Sencha Touch的一个主要升级版,引入了许多新特性和改进。其API文档主要包括以下几个部分: 1. **类系统**:Sencha Touch 2采用面向对象的类系统,包括基础类、控制器、模型、视图、存储、组件等。...

    touch-docs-2.2.1.zip(senchaTouch 离线API参考文档)

    1. **响应式设计**:Sencha Touch 提供了适应各种屏幕尺寸和设备的布局系统,确保应用在手机、平板和桌面设备上都能呈现良好的用户体验。 2. **丰富的UI组件**:包括列表(Lists)、表格(Grids)、按钮(Buttons)、面板...

    sencha.js sencha.css

    在给定的信息中,"sencha.js" 和 "sencha.css" 指向了Sencha的核心库文件,它们在创建交互式Web应用时起到关键作用。 **sencha.js**: 这是Ext JS库的主要JavaScript文件,包含了一整套用于构建桌面应用程序的组件...

    Sencha Touch2环境搭建

    1. **获取Sencha Touch 2 源码** - 打开终端或命令提示符,使用Git克隆Sencha Touch 2的官方仓库: ``` git clone https://github.com/sencha/Sencha-Touch.git ``` 2. **创建新项目** - 使用Sencha CMD创建一个...

    sencha touch中文翻译文档

    这个"Sencha Touch中文翻译文档"是针对Sencha Touch 2(ST2)的详细教程和指南,旨在帮助中国开发者更轻松地理解和运用这一框架。 在入门基础部分,文档可能涵盖了以下内容: 1. **安装与设置**:如何下载Sencha ...

    2013+Sencha.Touch.2:Up.and.Running.pdf 源代码,可运行

    1. **Sencha Touch 2基础知识**:Sencha Touch 2基于MVC(Model-View-Controller)架构,提供了丰富的UI组件和数据管理功能。通过学习这些源代码,你可以了解到如何创建模型(Models)、视图(Views)、控制器...

    sencha touch项目源码

    1. **组件系统**:Sencha Touch的核心是其强大的组件(Component)系统,它允许开发者创建各种复杂的用户界面元素,如按钮、表格、列表、面板等。组件可以嵌套,形成复杂的UI结构。 2. **模型(Model)与存储...

    一个完整的sencha touch 应用案例

    通过以上分析,我们可以看出这个压缩包提供了一个完整的Sencha Touch应用实例,从基础的HTML结构到应用程序的核心逻辑,再到资源管理和离线缓存,覆盖了构建一个移动Web社区所需的所有关键要素。学习和研究这个案例...

    Sencha Touch2 MVC Demo (含源码/数据库)

    1. **Sencha Touch 2框架**:包含`sencha-touch.js`或`sencha-touch-debug.js`,这是运行Sencha Touch应用的基本文件,包含了所有核心类和功能。 2. **主题样式**:Sencha Touch 2支持多种视觉主题,如`touch/...

    Hands-on Sencha Touch中文翻译第六章.pdf

    在阅读了《Hands-on Sencha Touch中文翻译第六章.pdf》文档的内容之后,可以提炼出以下知识点,主要涉及Sencha Touch框架以及使用Sencha Cmd命令行工具进行Sencha Touch应用的创建和管理。 ### Sencha Cmd命令行...

    Sencha Touch2发布.pdf

    Sencha Touch2发布.pdf

    sencha touch list demo

    1. **Sencha Touch 框架概述** Sencha Touch 是一个基于JavaScript的框架,目标是为智能手机和平板电脑提供原生般的交互体验。它支持多平台,包括iOS、Android、Blackberry等,并且包含了大量可复用的UI组件,如...

    sencha touch 2.4.0最新版

    Sencha Touch 2.4.0 是一个专为移动设备设计的前端JavaScript框架,它使得开发者能够构建功能丰富的、响应式的Web应用程序,这些应用在智能手机、平板电脑等移动设备上表现得如同原生应用一样流畅。这个框架由Sencha...

    Sencha Touch开发的项目《般若人生》源码

    通过分析这些文件,我们可以学习到如何组织一个Sencha Touch项目,如何利用其组件和数据管理机制,以及如何优化应用的性能和用户体验。对于想要深入理解Sencha Touch框架或者提高移动Web开发技能的开发者来说,...

    sencha touch 实例

    1. **Sencha Touch 与普通Web开发的区别** Sencha Touch 的开发与传统HTML页面开发的主要区别在于对HTML5和CSS3的深度利用,以及针对移动设备的优化。通过这些技术,ST能够实现类似原生应用的交互效果和视觉表现,...

    sencha-touch grid 代码

    1. **组件化设计**:Sencha Touch Grid基于组件模型,这意味着你可以将网格视为由多个可重用部分组成的单元,如行、列、头部和体部。这使得定制和扩展变得容易。 2. **数据绑定**:Grid与Sencha的数据存储(Store)...

    senchaTouch和fusioncharts结合的实例

    1. **Sencha Touch**: - Sencha Touch 是由Sencha公司开发的,基于HTML5的移动应用开发框架。 - 它提供了大量的UI组件,如表格、按钮、面板等,帮助开发者构建具有原生体验的跨平台应用。 - Sencha Touch 支持...

    sencha-touch-2.1.1-gpl.zip

    1. **响应式设计**:Sencha Touch 2.1.1支持各种屏幕尺寸和设备类型,能自动调整布局以适应不同的显示环境,确保应用在不同设备上都有良好的视觉效果。 2. **组件库**:框架包含大量预定义的UI组件,如按钮、表格、...

    Hands-On Sencha Touch 2

    ### Hands-On Sencha Touch 2:实战指南 #### 核心知识点概览 《Hands-On Sencha Touch 2》是一本全面介绍如何使用Sencha Touch 2.3框架开发高效移动Web应用的专业书籍。本书由资深Sencha Touch开发者、培训师及...

    sencha touch sdk工具

    Sencha Touch SDK工具是开发移动应用的重要资源,尤其对于那些希望使用Sencha Touch框架构建触控友好、跨平台Web应用程序的开发者来说。Sencha Touch是一个强大的JavaScript库,它提供了丰富的UI组件和API,使得...

Global site tag (gtag.js) - Google Analytics