Sencha 控制器简介(Ext.app.Controller)

简介: 本文适用于 Sencha Touch 2.x / ExtJS 4.x。 控制器,是一个完全将流程按面向对象方式设计的程序流程中的组件。例如,我们写最普通的PHP程序,页头包含 SESSION 模块,然后是访问控制。

本文适用于 Sencha Touch 2.x / ExtJS 4.x。

控制器,是一个完全将流程按面向对象方式设计的程序流程中的组件。例如,我们写最普通的PHP程序,页头包含 SESSION 模块,然后是访问控制。但若想,增加对主机名,子域名控制,则每一个包含的页面,都要再次增加包含之。或要么 在SESSION 模块,或要么在访问控制模块处增加一个包含文件。这样的话,程序逻辑将变得相当混乱。如果其中有出错与跳转,那么,势必会出现在不需要加载的页面跳来跳去。

控制器的目的,就是让页面请求最终到达所需要的页面。并且是基于面向对象的流程的。

通常:控制器,必须要有Host, SubDomain, IP,URL,ACL 的路由检测。由于现在一个网站,同时有浏览器与手机的,所以,还要有 UserAgent 检测。控制器才能做到最为方便地将一个请求映射到一个模块类的一个方法(事件)中。

  • 在应用中所产生的行为动作或事件都可以归并到控制器(Controllers)的范畴之内。
  • 比如一个简单的事件,在页面上有一个按钮,这个按钮弹出某些文字的行为,将会产生一个 tap 事件,负责监听这个单击 tap 事件的动作便是控制器。
  • 对于视图和模型而言,控制器其角色在于将两者绑定在一起。

控制器与 Ext.app.Application 之间的关系 Relation to Ext.app.Application

控制器贯穿于应用程序整体,在代码上下文经常要访问控制器的引用。一个典型的应用程序起码不止一个控制器,多个控制器来实现程序内不同的功能。例如一个电子商务网站,将会有订单的控制器、顾客的控制器或产品的控制器等等。

全家对象 Ext.app.Application 的 controllers 配置项保存了 ST2 程序的所有控制器。控制器一般不经过程序员来实例化,而是在框架内部中由 Application 对象实例化并保存实例的引用,因此如果我们 new 一个控制器出来使用那便是多此一举。

首先要介绍的是控制器的一对“活宝”:refs 引用项 及 control。

Refs 其实就是组件选择符(ComponentQuery),相似的概念我们在 CSS Selector 样式选择符中见到过,输入查询条件来选择特定的元素从而与其他的元素区分开来。如同 CSS 拥有强大的 jQuery /Szzla 那般,这里的组件 refs 也有一个不俗的 ComponentQuery。通过相似的概念我们理解起来也就比较容易了。当然,我们单单只是获取了组件后没有用,还必须把我们动作逻辑与组件关联起来。怎么做?我们看看下面一个简单的例子,这是一个点击按钮然后登出的动作过程。

Ext.define('MyApp.controller.Main', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            nav: '#mainNav'
        }
    },

    addLogoutButton: function() {
        this.getNav().add({
            text: 'Logout'
        });
    }
});
从结构上看,我们所说的 ref 仅仅是 key/value 结构的一种。key 标识引用的名称,既然为名称那么任意您设置,比如这里 nav 是导航的意思;value 表示选择符(selector),选择哪个或哪些组件就是通过这个组件选择符。必须指明的是,组件选择符是 ST 创造概念,也许其他 JS  框架页会有,目的是为了方便程序获取特定的对象——但必须说明这不是一个适普性的概念,只有某些框架提供才会支持。比如这里的 #mainNav 就是一个组件选择符,那么框架会根据这个条件(标识 id 为 mainNav)查询符合条件的组件。 

当我们需要访问这个组件的时候,可以通过 getNav() 函数获取组件。所有 refs 项都通过反射生成 getter/setter 方法,然后供程序员调用。这有存在一种默认的格式:总是用 get 开头,然后第一个字母变为大写,比如 nav --> getNav(),返回导航组件对象。

Ext.create('Ext.Toolbar', {
    id: 'mainNav',
    items: [
        {
            text: 'Some Button'
        }
    ]
});

像 nav : '#mainNav'这样,凭借组件的自身特征作为选择符条件使用的情形不是很多,更多的是在垂直方向写出组件层次定位组件,如“tabpanel panel[name=fish] infopanel”。



目录
相关文章
|
4月前
毕业设计 基于stm32舞台彩灯控制器设计app控制系统
毕业设计 基于stm32舞台彩灯控制器设计app控制系统
|
PHP
tp6 控制器不存在:app\index\controller\Index多项目目录路由
tp6 控制器不存在:app\index\controller\Index多项目目录路由
251 0
|
1月前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
106 3
|
2月前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
2月前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
2月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
19 0
|
2天前
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
|
12天前
|
前端开发 Android开发 开发者
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
【4月更文挑战第30天】本文探讨了使用Flutter开发混合应用的方法。混合应用结合Web技术和原生容器,提供快速开发和低成本维护。Flutter,一款现代前端框架,以其插件系统和高性能渲染引擎支持混合应用开发。通过创建Flutter项目、添加平台代码、使用WebView、处理平台间通信以及发布应用,开发者可构建跨平台混合应用。虽然混合应用有性能和用户体验的局限,但Flutter的跨平台兼容性和丰富的插件生态降低了开发成本。开发者应根据项目需求权衡选择。
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发