前言

大型客户端应用程序总是很难编写,很难组织和很难维护。随着功能的增加和更多的开发人员加入项目,对项目的控制也越来越困难了。Ext JS 4 提供了一个新的应用程序框架帮助组织代码。

模型 - 一组栏位和数据的集合。Model (在Ext JS 3中使用Record class)

视图 - 组件类型, grids,trees 和 panels 都是属于试图

控制器 -- 用来渲染试图,实例模型和其他的应用逻辑

文件结构

Ext JS4 遵循统一的目录结构。看一个例子:

index.html 的内容大致如下:

  1. <html>
  2. <head>
  3. <title>Account Manager</title>
  4.  
  5. <link rel="stylesheet" type="text/css" href="ext-4.0/resources/css/ext-all.css">
  6.  
  7. <script type="text/javascript" src="ext-4.0/ext-debug.js"></script>
  8.  
  9. <script type="text/javascript" src="app.js"></script>
  10. </head>
  11. <body></body>
  12. </html>

在app.js 中创建应用

每一个Ext JS 4的应用都从创建一个Application 类的实例开始。这个Application实例里配置了一些全局的设置(比如应用的名字)和模型,试图和控制器的设置。一个application也包含了一个启动的函数。

这里以一个简单的帐号管理应用为例,

首先,定义一个全局命名空间。所有的Ext JS应用都应该使用一个全局命名空间,所有的应用的类都位于这个之下。这里以 “AM”为例。

  1. Ext.application({
  2. name: 'AM',
  3.  
  4. appFolder: 'app',
  5.  
  6. launch: function() {
  7. Ext.create('Ext.container.Viewport', {
  8. layout: 'fit',
  9. items: [
  10. {
  11. xtype: 'panel',
  12. title: 'Users',
  13. html : 'List of users will go here'
  14. }
  15. ]
  16. });
  17. }
  18. });

定义一个控制器

控制器是把应用程序连接在一起的胶水。它们监听事件(从视图中过来)并执行一些操作。继续上面的例子,创建一个控制器。

app/controller/Users.js

  1. Ext.define('AM.controller.Users', {
  2. extend: 'Ext.app.Controller',
  3.  
  4. init: function() {
  5. console.log('Initialized Users! This happens before the Application launch function is called');
  6. }
  7. });

然后,把这个控制器加到应用中(app.js)

  1. Ext.application({
  2. ...
  3.  
  4. controllers: [
  5. 'Users'
  6. ],
  7.  
  8. ...
  9. });

当在浏览器中访问index.html的时候,Users这个控制器会自动被加载,它的init 函数会在应用的lanch 函数执行之前被调用。

init 函数用来设置和试图交互的控制器,以及和其他的控制器的关联。 control 函数可以很容易的监听事件并执行相应的动作处理函数。完善上面的Users 控制器

  1. Ext.define('AM.controller.Users', {
  2. extend: 'Ext.app.Controller',
  3.  
  4. init: function() {
  5. this.control({
  6. 'viewport > panel': {
  7. render: this.onPanelRendered
  8. }
  9. });
  10. },
  11.  
  12. onPanelRendered: function() {
  13. console.log('The panel was rendered');
  14. }
  15. });

这里在init 函数里使用了 this.control  来监听视图的事件。control 函数使用了最新的 ComponentQuery 引擎来快速找到引用的组件。关于ComponentQuery 可以参考ComponentQuery documentation

运行的效果如下:

定义一个视图

试图无非就是组件,这里创建一个Users grid 定义在文件app/view/user/List.js

  1. Ext.define('AM.view.user.List' ,{
  2. extend: 'Ext.grid.Panel',
  3. alias : 'widget.userlist',
  4.  
  5. title : 'All Users',
  6.  
  7. initComponent: function() {
  8. this.store = {
  9. fields: ['name', 'email'],
  10. data : [
  11. {name: 'Ed', email: 'ed@sencha.com'},
  12. {name: 'Tommy', email: 'tommy@sencha.com'}
  13. ]
  14. };
  15.  
  16. this.columns = [
  17. {header: 'Name', dataIndex: 'name', flex: 1},
  18. {header: 'Email', dataIndex: 'email', flex: 1}
  19. ];
  20.  
  21. this.callParent(arguments);
  22. }
  23. });

接下来,就是把这个视图加到Users控制器中。

  1. Ext.define('AM.controller.Users', {
  2. extend: 'Ext.app.Controller',
  3.  
  4. views: [
  5. 'user.List'
  6. ],
  7.  
  8. init: ...
  9.  
  10. onPanelRendered: ...
  11. });

接着就是放入到app.js中的 viewport中

  1. Ext.application({
  2. ...
  3.  
  4. launch: function() {
  5. Ext.create('Ext.container.Viewport', {
  6. layout: 'fit',
  7. items: {
  8. xtype: 'userlist'
  9. }
  10. });
  11. }
  12. });

这里使用xtype 指定userlist, (使用动态导入), 呈现的效果如下:

控制网格

这里添加每行的双击事件:

  1. Ext.define('AM.controller.Users', {
  2. extend: 'Ext.app.Controller',
  3.  
  4. views: [
  5. 'user.List'
  6. ],
  7.  
  8. init: function() {
  9. this.control({
  10. 'userlist': {
  11. itemdblclick: this.editUser
  12. }
  13. });
  14. },
  15.  
  16. editUser: function(grid, record) {
  17. console.log('Double clicked on ' + record.get('name'));
  18. }
  19. });

效果如下:

这里

[Ext JS 4] MVC 应用程序框架的更多相关文章

  1. ext.js的mvc开发模式详解

    ext.js的mvc开发模式详解和环境配置 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开 ...

  2. ext.js的mvc

    1.Ext.js的mvc开发模式 在ext.js4.0以后引入mvc开发模式,将js分成model-view-controller三层,使得大量js代码变得更加易于维护和重用,这就是ext.jsmvc ...

  3. 【翻译】在Ext JS 6通用应用程序中使用既共享又特定于视图的代码

    原文:Using Both Shared and View-Specific Code in an Ext JS 6 Universal App 在本文,在展示如何编写Ext JS 6通用应用程序代码 ...

  4. Ext.js 之MVC

    Ext.js 4.0之MVC

  5. 2017年第1贴:EXT.JS使用MVC模式时,注意如何协调MODEL, STORE,VIEW,CONTROLLER的关系

    也调了快一天,死活找不到窍门. MODEL, STORE,VIEW的调置测试了很久,试了N种方法,不得其果. 最后,试着在APPLICATION里加入CONTROLLER, 在CONTROLLER里加 ...

  6. 《Ext JS模板与组件基本框架图----组件》

    本节主要从七个方面讲解组件,组件时什么,它的作用,它的构架,以及怎么创建和周期还有常见的配置项,属性方法和事件以及其层级是什么都进行整理,希望对大家有帮助. 组件的基础知识.png 2 Abstrac ...

  7. [转]使用Sencha Ext JS 6打造通用应用程序

    原文地址:http://www.uedsc.com/using-sencha-ext-js-6-to-build-universal-apps.html 在Sencha和整个Ext JS团队的支持下, ...

  8. 【翻译】使用Sencha Ext JS 6打造通用应用程序

    原文:Using Sencha Ext JS 6 to Build Universal Apps {.aligncenter} 在Sencha和整个Ext JS团队的支持下,我很高兴能跟大家分享一下有 ...

  9. 【翻译】为Ext JS和Sencha Touch开发人员准备的应用程序监测(App Inspector)

    和其他的Sencha开发人员一样,我会花费大约半天的时间在我喜欢的IDE工具上编写JavaScript,而另一半时间则是在浏览器上测试和调试我的应用程序.在过去几年,每一个主要的浏览器都已大为改善.现 ...

随机推荐

  1. ZJOI 2017 二试 day1 4.26

    day0,11:30熄灯,又因为在房间里太浪,空调开了28度,过了好久才成功降温,导致睡得不太好QaQ. 于是早上昏昏欲睡,也没怎么听懂(orz孙耀峰). 中午大家一致提议下午不去听课,回到房间浪了好 ...

  2. 【Python简介】

    一.Python的简介 1.什么是python? Python(发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用 ...

  3. [bzoj3238]差异(后缀数组+单调栈)

    显然我们可以先把len(Ti)+len(Tj)的值先算出来,再把LCP减去.所有len(Ti)+len(Tj)的值为n*(n-1)*(n+1)/2,这个随便在纸上画一画就可以算出来的. 接下来问题就是 ...

  4. 最近遇到的DISCUZ一些问题解决方法

    “抱歉,您的请求来路不正确或表单验证串不符,无法提交” 打开“source\class\helper\helper_form.php”, 然后把“$_GET[‘formhash’] == formha ...

  5. isnotblank与isnotempty的区别

  6. C++编译报错:重复定义

    http://note.youdao.com/noteshare?id=cb2bed862a2daae89775603168f297af

  7. 000. 规范类的设计(ing)

    1.变量命名规范 变量命名有许多约定俗成的规范,下面的这些规范能有效提高程序的可读性: 标识符要能体现实际含义(顾名思义). 变量名一般用小写字母,如index,不要使用Index或INDEX. 用户 ...

  8. discuz开发,登录次数过多,锁定解决方法

    到数据库里的表找到pre_common_failedlogin 和pre_ucenter_failedlogins清空里面的内容即可. truncate table pre_common_failed ...

  9. Java集合框架(list,Queue)

    List和Queue都继承自Collection接口 list常规用法 List判断两个对象相等的标准:equals方法返回true class A2 { public boolean equals( ...

  10. Centos7系统环境下Solr之Java实战(二)制定中文分析器、配置业务域

    制定中文分析器 1.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 2.把扩展词典.配置文件放到solr工程的WEB-INF/classes目录下. 配置一个Fiel ...