Ext JS是一款功能强大的JavaScript图形界面库,旨在为Web应用程序开发人员提供完整的MVC体系结构、面向对象编程和用户界面控件。本文将介绍从零开始学习Ext JS的完整入门教程,让读者能够快速掌握这款库的基本知识和技巧。
一、准备工作
在开始学习之前,需要先准备好以下几个方面:
1. 了解基本的HTML/CSS/JavaScript知识和语法。
2. 下载和安装Web服务器(如Apache、Nginx等)以及安装浏览器(推荐Chrome浏览器)。
3. 下载和安装本地开发环境(如Node.js、NPM、Git等)。
4. 下载和安装Ext JS库并配置好环境变量。
二、认识Ext JS
首先,让我们来了解一下Ext JS的背景和特性。Ext JS最初由Sencha公司(Sencha是Ext JS的商标)开发,目的是为Web应用程序开发人员提供一种快速、易于使用和可扩展的框架。
Ext JS支持多种标准的Web开发技术,如Ajax、DOM操作、事件处理等,并具有以下特性:
1. 完整的MVC体系结构,包括模块、控制器和视图。
2. 大量的用户界面控件和扩展,如表格、表单、菜单、窗口、布局等。
3. 强大的数据绑定和数据模型,支持多种数据源和数据格式。
4. 高度可定制和可扩展,能够满足各种需求和扩展性。
5. 大量的文档和社区支持,能够提供完整的开发资源和解决方案。
三、开始Ext JS之旅
接下来,让我们通过一个简单的例子来开始Ext JS之旅。首先,创建一个HTML文件,并引入Ext JS库和必要的CSS文件:
```html
Ext JS入门教程
```
然后,创建一个简单的按钮并附加一个事件处理程序:
```javascript
Ext.onReady(function(){
var button = Ext.create('Ext.Button',{
text: '点击我',
renderTo: Ext.getBody(),
handler: function(){
Ext.Msg.alert('提示','你点击了按钮');
}
});
});
```
以上代码会创建一个文本为“点击我”的按钮,并附加一个单击事件处理程序。当用户单击按钮时,Ext JS会弹出一个提示框显示“你点击了按钮”的信息。
四、深入学习Ext JS
现在,我们已经成功地创建了一个简单的Ext JS应用程序,并实现了一个基本的功能。接下来,让我们深入学习如何使用Ext JS来实现更加复杂和实用的应用程序。
1. MVC体系结构
MVC是一种经典的软件设计模式,它将应用程序分为模型、视图和控制器三个部分。模型是应用程序的数据模型,用于处理和管理应用程序的数据操作;视图是应用程序的UI界面,用于呈现和显示应用程序的数据和状态;控制器是应用程序的业务逻辑,用于控制和管理应用程序的操作和流程。Ext JS支持完整的MVC体系结构,可以让我们快速地开发出高效、可维护的应用程序。
示例代码:
```javascript
Ext.define('UserModel',{
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'email', type: 'string'}
]
});
Ext.create('Ext.data.Store',{
model: 'UserModel',
data: [
{id: 1, name: '张三', email: 'zhangsan@example.com'},
{id: 2, name: '李四', email: 'lisi@example.com'},
{id: 3, name: '王五', email: 'wangwu@example.com'}
]
});
Ext.define('UserController',{
extend: 'Ext.app.Controller',
init: function(){
this.control({
'userlist': {
itemdblclick: this.editUser
},
'userform button[action=save]': {
click: this.updateUser
}
});
},
editUser: function(grid, record){
var view = Ext.create('Ext.window.Window',{
title: '编辑用户',
modal: true,
items: [{ xtype: 'userform', type: 'edit', record: record }]
});
view.show();
},
updateUser: function(button){
var win = button.up('window'),
form = win.down('form'),
record = form.getRecord(),
values = form.getValues();
record.set(values);
win.close();
}
});
Ext.define('UserList',{
extend: 'Ext.grid.GridPanel',
alias: 'widget.userlist',
store: 'UserStore',
columns: [
{ header: 'ID', dataIndex: 'id', flex: 1 },
{ header: '姓名', dataIndex: 'name', flex: 1 },
{ header: '邮箱', dataIndex: 'email', flex: 1 }
],
initComponent: function(){
this.callParent(arguments);
this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
},
onSelectChange: function(selModel, selections){
var edit = this.down('#edit');
if(selections.length === 1){
edit.enable();
} else {
edit.disable();
}
}
});
Ext.define('UserForm',{
extend: 'Ext.form.Panel',
alias: 'widget.userform',
layout: 'anchor',
defaults: { anchor: '100%' },
buttons: [{ text: '保存', action: 'save' }],
initComponent: function(){
this.callParent(arguments);
if(this.type === 'edit'){
this.loadRecord(this.record);
}
},
items: [
{ xtype: 'textfield', name: 'name', fieldLabel: '姓名' },
{ xtype: 'textfield', name: 'email', fieldLabel: '邮箱' }
]
});
```
以上代码会创建一个模型UserModel和一个数据集合UserStore,然后创建一个控制器UserController,用于控制用户列表视图UserList和用户编辑视图UserForm的事件操作和业务逻辑。
2. 用户界面控件
用户界面控件是Ext JS的一个重要特性,可以帮助我们快速地创建各种功能丰富、易于使用的界面元素。Ext JS支持多种用户界面控件,如表格、表单、菜单、窗口、布局等,可以满足不同的需求和场景。
示例代码:
```javascript
Ext.create('Ext.window.Window',{
title: '窗口',
height: 200,
width: 400,
layout: 'fit',
items: [{ xtype: 'button', text: '按钮' }]
}).show();
Ext.create('Ext.form.Panel',{
title: '表单',
frame: true,
renderTo: Ext.getBody(),
width: 400,
bodyPadding: 10,
items: [
{ xtype: 'textfield', name: 'name', fieldLabel: '姓名' },
{ xtype: 'textfield', name: 'email', fieldLabel: '邮箱' },
{ xtype: 'button', text: '保存' }
]
});
Ext.create('Ext.grid.Panel',{
title: '表格',
renderTo: Ext.getBody(),
width: 600,
height: 400,
store: Ext.create('Ext.data.Store',{
fields: ['name', 'email'],
data: [
{name: '张三', email: 'zhangsan@example.com'},
{name: '李四', email: 'lisi@example.com'},
{name: '王五', email: 'wangwu@example.com'}
]
}),
columns: [
{ header: '姓名', dataIndex: 'name', flex: 1 },
{ header: '邮箱', dataIndex: 'email', flex: 1 }
]
});
```
以上代码会创建一个窗口、一个表单和一个表格,并演示如何使用不同的用户界面控件来实现各种界面效果。
3. 数据绑定和数据模型
数据绑定和数据模型是Ext JS的核心特性之一,能够帮助我们快速地实现数据的绑定和处理,以及建立应用程序的数据模型。Ext JS支持多种数据绑定和数据处理方式,如单向数据绑定、双向数据绑定、数据过滤、数据排序等。
示例代码:
```javascript
Ext.create('Ext.data.Store',{
fields: ['name', 'email'],
data: [
{ name: '张三', email: 'zhangsan@example.com' },
{ name: '李四', email: 'lisi@example.com' },
{ name: '王五', email: 'wangwu@example.com' }
]
});
Ext.create('Ext.grid.Panel',{
title: '表格',
renderTo: Ext.getBody(),
width: 600,
height: 400,
store: Ext.create('Ext.data.Store',{
fields: ['name', 'email'],
data: [
{name: '张三', email: 'zhangsan@example.com'},
{name: '李四', email: 'lisi@example.com'},
{name: '王五', email: 'wangwu@example.com'}
]
}),
columns: [
{ header: '姓名', dataIndex: 'name', flex: 1 },
{ header: '邮箱', dataIndex: 'email', flex: 1 }
]
});
Ext.create('Ext.form.Panel',{
title: '表单',
frame: true,
renderTo: Ext.getBody(),
width: 400,
bodyPadding: 10,
viewModel: {
data: {
name: '张三',
email: 'zhangsan@example.com'
}
},
defaults: { anchor: '100%' },
items: [
{ xtype: 'textfield', name: 'name', fieldLabel: '姓名', bind: '{name}' },
{ xtype: 'textfield', name: 'email', fieldLabel: '邮箱', bind: '{email}' },
{ xtype: 'button', text: '保存', handler: function(){
var form = this.up('form'),
values = form.getValues();
form.getViewModel().set(values);
} }
]
});
```
以上代码演示了如何使用Ext JS来实现数据绑定和数据模型。其中,数据绑定和数据模型都是基于ViewModel的,能够帮助我们快速地建立应用程序的数据模型并实现数据的绑定和处理。
五、总结
本文介绍了从零开始学习Ext JS的完整入门教程,包括Ext JS的背景和特性、准备工作、认识Ext JS、深入学习Ext JS和Ext JS的总结。通过本文的学习,读者可以快速掌握Ext JS的基本知识和技巧,从而能够在实践中灵活地应用和扩展Ext JS。在未来的开发中,读者可以继续深入学习和掌握Ext JS的高级特性和应用技巧,以构建更加丰富和高效的Web应用程序。