Extjs5.0(2):手动搭建MVVM架构项目
来源:互联网 发布:蚁群算法流程 编辑:程序博客网 时间:2024/06/05 12:07
搭建项目前,要先下载extjs5.0的sdk包。由于sdk包比较大,不能一次性上传,我分成两个包Extjs5.0(1)和Extjs5.0(2),下载完这两个包之后,解压,放在同一个文件夹里面,可以命名为Extjs5.0。最后Extjs5.0文件夹下完整的目录如下:
构建项目需要用到Extjs5.0包的以下文件:
Extjs5.0\build\ bootstrap.js
Extjs5.0\build\ ext-all.js
Extjs5.0\build\ ext-all-debug.js
Extjs5.0\build\packages\ext-theme-crisp\build\ext-theme-crisp.js
Extjs5.0\build\packages\ext-theme-crisp\build\ext-theme-crisp-debug.js
Extjs5.0\build\packages\ext-theme-crisp\build\resources\images
Extjs5.0\build\packages\ext-theme-crisp\build\resources\ext-theme-crisp-all.css
Extjs5.0\build\packages\ext-theme-crisp\build\resources\ext-theme-crisp-all-debug.css
我们可以把这些文件放在一个文件夹里面,作为项目的资源文件。例如我把这些文件放在一个叫ext的文件夹里面,在我们新建项目时,把这个ext文件夹复制进去就可以了。
下面开始建立项目。我这里用的IDE是WebStorm,如果用的是eclipse、myeclipse或者其他IDE的同学,自行根据所用的软件构建web项目,这里不做介绍。
我们新建一个项目,命名为test1,把我们的库文件复制到项目根目录下。
app.js:
Ext.application({ name: 'MyApp', launch: function() { Ext.create('Ext.container.Viewport', { layout: 'center', items: [{ title: 'Centered Content', width: '50%', height:'50%', border:true, html: 'Some content' }] }); }});
index.html:
<!DOCTYPE HTML><html manifest=""><head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta charset="UTF-8"> <title>MyApp</title> <link rel="stylesheet" type="text/css" href="ext/ext-theme-crisp-all.css"> <script type ="text/javascript" src="ext/bootstrap.js"></script> <script type ="text/javascript" src="ext/ext-theme-crisp.js"></script> <script type ="text/javascript" src="app.js"></script></head><body></body></html>
这样就建立起来一个简单的extjs项目,我们运行在浏览器中打开index.html,会看到我们的项目效果。
下面我们简单的介绍一下我们引入的ext这个文夹下各个文件的作用。
ext-all.js:extjs库文件,最主要的文件,extjs的定义及所有组件和方法。
ext-all-debug.js:ext-all.js的未压缩版。我们项目中只需要引入ext-all或者ext-all-debug,二者选一就好。
bootstrap.js:用于启动项目时,自动选择加载ext-all.js或者ext-all-debug.js。如果当前是开发模式,则会自动加载ext-all-debug.js文件,如果是发布模式,则加载ext-all.js文件。
ext-theme-crisp.js:对于crisp这个主题的一些优化。
ext-theme-crisp-all.css:crisp主题css文件。
ext-theme-crisp-all-debug.css:ext-theme-crisp-all.css的未压缩版,我们项目中只需要引入ext-theme-crisp-all.css或者ext-theme-crisp—all-debug.css,二者选一就好。开发时选择ext-theme-crisp-all-debug,未压缩版方便我们出错时准确定位出错位置,发布时则用ext-theme-crisp-all,减少网络请求流量,加快加载速度。
Image:主题所需要用到的image文件。
再讲一下项目的启动流程。
观察一下index.html,发现我们加载了以下的ext库文件。
<link rel="stylesheet" type="text/css"href="ext/ext-theme-crisp-all.css">
<script type ="text/javascript"src="ext/bootstrap.js"></script>
<script type ="text/javascript"src="ext/ext-theme-crisp.js"></script>
首先加载主题文件,再加载bootstrap.js,判断是加载ext-all.js还是ext-all-debug.js,最后加载ext-theme-crisp.js,对主题做一些修复(适应),这样子就把extjs引入进来了。
接下来就是引入我们自己的js文件,app.js是我们程序的入口,首先创建一个Ext.container.Viewport,这类似于获取我们html中的body,然后我们所有的其他组件,都放在这个viewport里面。
至此,我们的项目已经能运行了,下面介绍搭建MVVM架构项目。MVVM大家可能比较陌生,但是MVC相信大多数人都知道。MVC是extjs4新引入的,MVVM是extjs5新引入的,我们这里讲的是extjs5,所以对MVC就不多介绍,有兴趣的同学自行网上查询,这方面资料有很多。
在搭建MVVM架构时需要注意,此时我们的项目必须放在web服务器上才能正常运行,因为里面用到动态加载,需要httprequest。我用的是webstorm,运行时会自动开启一个web服务。如果是是用其他编辑器的同学,可以把项目发布在tomcat或者其他web服务器中。我们项目在浏览器中的访问地址应该类似这样:下面开始项目搭建。
在我们目前项目的基础上,在根目录建立app文件夹,在app目录下,建立view、model、store三个包和Application.js文件,项目结构如下:
Application.js:
Ext.define('MyApp.Application', { extend: 'Ext.app.Application',//继承Ext.app.Application name: 'MyApp',//命名空间 stores: [ //需要用到的stores ] });
修改app.js代码如下:
Ext.application({ name: 'MyApp',//应用的命名空间 extend: 'MyApp.Application',//继承自app目录下Application.js autoCreateViewport: 'MyApp.view.main.Main'//自动创建viewport,并引入app\view\main\Main.js文件,创建MyApp.view.main.Main});
然后在浏览器访问index.html,会发现报错,主要原因是找不到app\view\main\Main.js文件。我们在app\view\main\中建立该文件就可以了,Main.js就是我们以后程序的主页面。
Main.js代码如下:
Ext.define('MyApp.view.main.Main', { extend: 'Ext.container.Container', xtype: 'app-main', html: 'hello world'});
浏览器中打开index.html:
效果出来了。
接下来我们创建一个表格。创建一个用户表。
app\view下创建user包,包下建立UserGrid.js
UserGrid.js代码如下:
Ext.define('MyApp.view.user.UserGrid', { extend: 'Ext.grid.Panel', xtype: 'app-usergrid', title: '用户列表', columns: [ { text: '用户名', dataIndex: 'name',flex:1 }, { text: '性别', dataIndex: 'email', flex: 1 }, { text: '电话', dataIndex: 'phone',flex: 1 } ], width: 400, border:true});
修改Main.js代码如下:
Ext.define('MyApp.view.main.Main', { extend: 'Ext.container.Container', xtype: 'app-main', requires:['MyApp.view.user.UserGrid'], layout: { type: 'center' }, items: { xtype:'app-usergrid' }});
浏览器中打开index.html,效果如下:
接下来为该表填入几条记录。
首先在model包下建立UserModel数据模型
UserModel.js:
Ext.define('MyApp.model.UserModel', { extend: 'Ext.data.Model', fields: [ {name: 'name', type: 'string'}, {name: 'age', type: 'int'}, {name: 'phone', type: 'string'} ]});
在store包下建立UserStore
UserStore.js:
Ext.define('MyApp.store.UserStore', { extend: 'Ext.data.Store', model: 'MyApp.model.UserModel', autoLoad: true, proxy: { type: 'ajax', api: { read: 'data/users.json' }, reader: { type: 'json', rootProperty: 'users', successProperty: 'success' } }});
在项目根目录下建立data包,用于存放json数据。由于我们这里没涉及到后台,所以用到的json数据不从后台读取,这里从我们的data包里面读取。data包下建立模拟数据。
Users.json:
{ success: true, users: [ {id: 1, name: 'Ed', age:18, phone: '110'}, {id: 2, name: 'Tommy', age:20,phone: '110'} ]}
至此,所有文件都建立完成,接下来,把文件结合统一。
修改Application.js,引入我们前面定义的store。
Application.js:Ext.define('MyApp.Application', { extend: 'Ext.app.Application',//继承Ext.app.Application name: 'MyApp',//命名空间 stores: [ 'UserStore@MyApp.store'//引入需要的store ] });
修改UserGrid.js,把store加载进来。
UserGrid.js:Ext.define('MyApp.view.user.UserGrid', { extend: 'Ext.grid.Panel', xtype: 'app-usergrid', title: '用户列表', store:'UserStore', border:true, columns: [ { text: '用户名', dataIndex: 'name',flex:1 ,align:'center'}, { text: '年龄', dataIndex: 'age', flex: 1 ,align:'center'}, { text: '电话', dataIndex: 'phone',flex: 1 ,align:'center'} ], width: 400});
浏览器中打开index.html,效果如下:
接下来为表格设置item(行)的点击事件。
在user包下建立UserGridController.js,用于控制grid事件。
UserGridController.js:Ext.define('MyApp.view.user.UserGridController', { extend: 'Ext.app.ViewController', alias: 'controller.usergrid', userClick:function( view, record, item, index, e, eOpts){ alert('hello'+record.get('name')) }});
在UserGrid.js中引入该控制器。
UserGrid.js:Ext.define('MyApp.view.user.UserGrid', { extend: 'Ext.grid.Panel', requires: ['MyApp.view.user.UserGridController'], xtype: 'app-usergrid', controller: 'usergrid',//控制器 title: '用户列表', store:'UserStore', border:true, columns: [ { text: '用户名', dataIndex: 'name',flex:1 ,align:'center'}, { text: '年龄', dataIndex: 'age', flex: 1 ,align:'center'}, { text: '电话', dataIndex: 'phone',flex: 1 ,align:'center'} ], width: 400, listeners: { itemdblclick: { fn: 'userClick', scope: "controller" } }});
浏览器中打开index.html,双击某一行,效果如下:
完整的目录结构:
MVVM项目搭建就讲到这里。
可能很多人并不知道MVVM是什么意思,上网去查也没发现有多少人能把这东西讲明白,我自己也讲不出很概念性的一个定义,但是我们可以通过对项目的搭建和编程中去探讨,去了解。下一节我们讲利用工具搭建MVVM项目,然后就这项目一步一步的完善,去探讨和了解Extjs5和它的MVVM。
最后附上项目的完整代码。
交流群:170198012
- Extjs5.0(2):手动搭建MVVM架构项目
- Extjs5.0(3):利用官方工具搭建MVVM架构项目
- ExtJS5.0的mvvm分层思想
- 使用SenchaCMD搭建ExtJs5.1 MVVM开发环境
- 搭建简易MVVM项目
- ExtJS5 - 认识MVVM
- extjs5(MVVM特性
- ExtJs5+Spring.Net+MVC项目搭建笔记--前台ExtJS搭建(2)
- 手动搭建Maven项目
- ExtJs5+Spring.Net+MVC项目搭建笔记(4)--配置Spring
- ExtJs5+Spring.Net+MVC项目搭建笔记(5)--连接数据库
- Nodejs 手动搭建 Express 项目
- 手动webpack搭建vue2项目
- MVVM架构
- MVVM架构
- MVVM架构
- 快速搭建codeigniter3.0和extjs5.0开发平台
- Android项目架构搭建
- iphone 字符串转换积累中
- Could not execute menu item (internal error) [Exception] Could not perform service action
- mysql安装
- Android:onNewIntent()触发机制及注意事项
- Android_ViewStub
- Extjs5.0(2):手动搭建MVVM架构项目
- iPhone/iOS图片相关(读取、保存、绘制、其它相关)
- poj1984 带权并查集
- CoreBluetooth蓝牙扫描协议问题
- drawCircle方法:绘制圆形
- IOS 6 自动布局 入门-2
- IPhone之ASINetworkQueue 异步队列
- spring-boot rest 加jsp页面
- linux CFS调度策略源码解析