ext3学习小结
先介绍一下ext3和ext4的一些区别吧,初看ext4相对于ext3源码还是有很多不同的,ext4加入的define和create两个强大的类,ext4为了让源码容易看,特意将所有的类进行了define。源码的ext3用的是new出实例,而ext4大量用了create。其他的书写还是差不多的。
第一步先将ext3的环境建立起来,在下载的ext中需要引用
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css"/>
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../ext-all.js"></script>
这三条即可,需要注意的是上面的第三条与第二条调换位置,会报错。系统提示EXT未定义。这里还是需要注意的。
环境建立起来后,可以写个简单的messageBox来测试一下
Ext.onReady(function(){
Ext.MessageBox.confirm('Confirm', 'Are you sure you want to do that?');
});
测试成功了说明你的ext环境建立起来了,这里的onReady和js中的window.onload类似,但是还是有区别的。onReady是当页面的dom框架加载完成后就可以执行,不需要等待页面的图片等元素加载。而onload是在图片等元素加载完成后才去执行的。这样相对来说onready还是比较高效的。
下面介绍一些ext的一些核心,首先ext3是对js的封装,一个大型的js框架。就是提供了对界面ui,js基本类型的操作和一些操作的方法,Dom,事件,继承都进行了一系列的封装,框架的使用是为了更高效。对于dom的操作,ext进行了很好的封装让程序更加完美。
对于dom,ext祭出了get和fly,get和fly都是根据id或者节点找得相应的元素。而相对getElementByID,get和fly是十分高效的。get用到了缓存,fly用到了享元模式。如果想用ext对dom操作封装的方法要用get或fly,这两个方法得到的是ext封装的dom元素,并不是html的dom元素。关于dom无非就是一些是对父节点和子节点的增删改查,和加入css样式罢了,知道了一些操作就可以去api找到相应的方法,
js基本类型的操作, number,string,,object,function,对这几个类型的遍历,删除元素,增加元素,产生随机数,还是对数组的操作,Array
一些ext中的各种提示框,消息框,输入框,进度条等一些小的组件就不介绍了,api中很是全面。
下面重点来看一些ext ui的操作,当然这也是工作中最常用到的。。。。。。
根据需求来一点一点写代码
我们需要实现一种在全屏的,左面有导航栏的那种效果
首先这是一整个viewport,分为左面和右面,layout需要‘border’ 格式。左面用到region为‘west’,右面region为‘center’。下面是代码
var accordion = new Ext.Panel({
region:'west',
margins:'5 0 5 5',
split:true,
width: 210,
layout:'accordion',
items: [item1, item2, item3, item4, item5]
}); var viewport = new Ext.Viewport({
layout:'border',
items:[
accordion, {
id:'contend-panel',
region:'center',
layout:'card',
margins:'5 5 5 0',
cls:'empty',
bodyStyle:'background:#f1f1f1',
activeItem:0,
items:[aObj,bObj,cObj]
}],
renderTo:Ext.getBody()
});
上面的item1-item5都是一个个panel,而第一个item1下面有树的结构,这是一个treepanel,treepanel继承了panel。下面代码
var item1 = new Ext.tree.TreePanel({
title: 'Accordion Item 1',
cls:'empty',
autoScroll: true,
split: true,
useArrows:true,
loader: new Ext.tree.TreeLoader(),
root: new Ext.tree.AsyncTreeNode({
expanded: true,
children: [{
text: 'Menu Option 1',
leaf: true
}, {
text: 'Menu Option 2',
leaf: true
}, {
text: 'Menu Option 3',
leaf: true
}]
}),
rootVisible: false,
/* listeners: {
click: function(n) {
Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
}
}*/
});
我们需要点击上面的menu option1 或者menu option2在右面显示不同的画面,这里需要在右面设置layout:‘card’。上面已经设置完了,还要将想在右面显示的所有的画面写入items,上面已写入 这句 activeItem:0,表示首页是aObj这个页面,下面来设置点击事件
item1.on('click',function(n){
var sn=this.selModel.selNode || {};
if(n.leaf && n.id != sn.id){
Ext.getCmp('contend-panel').layout.setActiveItem(n.id+'-content');
}
}); var aObj=new Ext.Panel({
id:'item1of',
title:'this is my title',
html:'<span>this is 1my title</span>'
});
var cObj={
id:'xnode-36-content',
title:'this is my Menu2 title',
html:'<span>this is my Menu2 text</span>'
}
这样就实现了。
我们点击menu option1
这里我们来写aobj的代码
右面的代码我们需要一个表格框来装数据,这里用到了Ext.data.Store先来存储这数据再用到Ext.grid.GridPanel来装数据
/*!
* Ext JS Library 3.4.0
* Copyright(c) 2006-2011 Sencha Inc.
* licensing@sencha.com
* http://www.sencha.com/license
*/
SampleGrid = function(limitColumns){ function italic(value){
return '<i>' + value + '</i>';
} function change(val){
if(val > 0){
return '<span style="color:green;">' + val + '</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '</span>';
}
return val;
} function pctChange(val){
if(val > 0){
return '<span style="color:green;">' + val + '%</span>';
}else if(val < 0){
return '<span style="color:red;">' + val + '%</span>';
}
return val;
} var columns = [
{id:'company',header: "公司", width: '20%', sortable: true, dataIndex: 'company'},
{header: "价格", width: '20%', sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
{header: "Change", width: '20%', sortable: true, renderer: change, dataIndex: 'change'},
{header: "% Change", width: '20%', sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
{header: "Last Updated", width: '20%', sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
]; // allow samples to limit columns
if(limitColumns){
var cs = [];
for(var i = 0, len = limitColumns.length; i < len; i++){
cs.push(columns[limitColumns[i]]);
}
columns = cs;
} SampleGrid.superclass.constructor.call(this, {
store: new Ext.data.Store({
reader: new Ext.data.ArrayReader({}, [
{name: 'company'},
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
]),
data: [
['3m Co',71.72,0.02,0.03,'9/1 12:00am'],
['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],
['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],
['American Express Company',52.55,0.01,0.02,'9/1 12:00am'],
['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],
['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],
['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],
['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],
['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'],
['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],
['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am'],
['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am'],
['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am'],
['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],
['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am'],
['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am'],
['International Business Machines',81.41,0.44,0.54,'9/1 12:00am'],
['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am'],
['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am'],
['McDonald\'s Corporation',36.76,0.86,2.40,'9/1 12:00am'],
['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am'],
['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am'],
['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am'],
['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am'],
['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am'],
['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am'],
['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am'],
['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am'],
['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']
]
}),
columns: columns,
autoExpandColumn: 'company',
//layout:'fit'
width:'100%',
height:570,
stripeRows: true,
listeners: {
viewready: function(g) {
g.getSelectionModel().selectRow(0);
} // Allow rows to be rendered.
}, sm: new Ext.grid.RowSelectionModel({
singleSelect: true,
listeners: {
rowselect: function(sm, row, rec) {
Ext.getCmp("xnode-35-content").getForm().loadRecord(rec);
}
}
})
}); } Ext.extend(SampleGrid, Ext.grid.GridPanel);
我们还需要点击一条数据将数据实现到上面的文本框中,上面是一个toolbar,一个个文本框是textfield,这一操作写起来很方便,ext封装的很好
上面的sm: new Ext.grid.RowSelectionModel 已经写出了。只需要文本框的name与数据columns的dataIndex对应起来就可以了
下面是aObj的具体代码
var bObj={
id:'xnode-35-content',
xtype:'form',
title:'this is my 2 title',
//new SampleGrid([0, 1,2,3,4])
items: [
new Ext.Toolbar({
items:[
{
xtype:'label',
text:'公司:'},{
xtype:'textfield',
name: 'company',
},'-',
{xtype:'label',
text:'价格:'},
{
xtype:'textfield',
name: 'price'
},'-',
{xtype:'label',text:'%Change:'},
{
xtype:'textfield',
name: 'pctChange'
},'-',
{xtype:'label',text:'Last Updated:'},
{
xtype: 'datefield',
xtype:'textfield',
name: 'lastChange'
}
]
})
,{
layout:'fit',
items:new SampleGrid([0, 1,2,3,4])
}]
//this is gridplane
};
看上面的name和数据的dataIndex是对应的
这样就实现了这一整体功能
下面是连起来的代码
<html>
<head>
<meta charset="utf-8">
<title>Accordion Layout</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css"/> <!-- GC -->
<!-- LIBS -->
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<!-- ENDLIBS --> <script type="text/javascript" src="../../ext-all.js"></script>
<script type="text/javascript" src="sample-grid.js"></script>
<style type="text/css" >
html, body {
font: normal 12px verdana;
margin: 0;
padding: 0;
border: 0 none;
overflow: hidden;
height: 100%;
}
.empty .x-panel-body {
padding-top:0px;
text-align:left;
font-style:italic;
color: gray;
font-size:11px;
}
.x-grid3-row-over .x-grid3-cell-inner { //鼠标移动到的该行的效果
font-weight: bold;
color: red;
}
</style>
<script type="text/javascript">
Ext.onReady(function() { var item1 = new Ext.tree.TreePanel({
title: 'Accordion Item 1',
cls:'empty',
autoScroll: true,
split: true,
useArrows:true,
loader: new Ext.tree.TreeLoader(),
root: new Ext.tree.AsyncTreeNode({
expanded: true,
children: [{
text: 'Menu Option 1',
leaf: true
}, {
text: 'Menu Option 2',
leaf: true
}, {
text: 'Menu Option 3',
leaf: true
}]
}),
rootVisible: false,
/* listeners: {
click: function(n) {
Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
}
}*/
}); item1.on('click',function(n){
var sn=this.selModel.selNode || {};
if(n.leaf && n.id != sn.id){
Ext.getCmp('contend-panel').layout.setActiveItem(n.id+'-content');
}
}); var aObj=new Ext.Panel({
id:'item1of',
title:'this is my title',
html:'<span>this is 1my title</span>'
}); var bObj={
id:'xnode-35-content',
xtype:'form',
title:'this is my 2 title',
//new SampleGrid([0, 1,2,3,4])
items: [
new Ext.Toolbar({
items:[
{
xtype:'label',
text:'公司:'},{
xtype:'textfield',
name: 'company',
},'-',
{xtype:'label',
text:'价格:'},
{
xtype:'textfield',
name: 'price'
},'-',
{xtype:'label',text:'%Change:'},
{
xtype:'textfield',
name: 'pctChange'
},'-',
{xtype:'label',text:'Last Updated:'},
{
xtype: 'datefield',
xtype:'textfield',
name: 'lastChange'
}
]
})
,{
layout:'fit',
items:new SampleGrid([0, 1,2,3,4])
}]
//this is gridplane
}; var cObj={
id:'xnode-36-content',
title:'this is my Menu2 title',
html:'<span>this is my Menu2 text</span>'
} var item2 = new Ext.Panel({
title: 'Accordion Item 2',
html: '<empty panel>',
cls:'empty'
}); var item3 = new Ext.Panel({
title: 'Accordion Item 3',
html: '<empty panel>',
cls:'empty'
}); var item4 = new Ext.Panel({
title: 'Accordion Item 4',
html: '<empty panel>',
cls:'empty'
}); var item5 = new Ext.Panel({
title: 'Accordion Item 5',
html: '<empty panel>',
cls:'empty'
}); var accordion = new Ext.Panel({
region:'west',
margins:'5 0 5 5',
split:true,
width: 210,
layout:'accordion',
items: [item1, item2, item3, item4, item5]
}); var viewport = new Ext.Viewport({
layout:'border',
items:[
accordion, {
id:'contend-panel',
region:'center',
layout:'card',
margins:'5 5 5 0',
cls:'empty',
bodyStyle:'background:#f1f1f1',
activeItem:0,
items:[aObj,bObj,cObj]
}],
renderTo:Ext.getBody()
});
});
</script>
</head>
<body>
<script type="text/javascript" src="../shared/examples.js"></script><!-- EXAMPLES -->
</body>
</html>
ext3学习小结的更多相关文章
- flex学习小结
接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- ExtJs学习笔记之学习小结LoginDemo
ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- 点滴的积累---J2SE学习小结
点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...
- (转) Parameter estimation for text analysis 暨LDA学习小结
Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
随机推荐
- mysql存储过程及常用函数
原文:mysql存储过程及常用函数 一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取 ...
- 谈谈Oracle dba_free_space
谈谈Oracle dba_free_space 博客分类: ORACLE管理 OracleSQLC#C++C 顾名思义,dba_free_space指的是Oracle还有多少表空间剩余空间,其视图结 ...
- open打开窗口并且获得打开窗口的窗口对象
//主窗体 <script language="javascript" type="text/javascript"> function opens ...
- Cygwin 是一个用于 Windows 的类 UNIX shell 环境
cygwin的安装使用 Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 ...
- 重构 ORM 中的 Sql 生成
Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成 前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 OR ...
- Mac 下ll命令 command not found
在linux下习惯使用ll.la.l等ls别名的童鞋到mac os提示command not found -461deMacBook-Pro:~ root# cd ~ -461deMacBook-Pr ...
- bios和dos中断
1.字符功能调用类(Character-Oriented Function)01H.07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H — ...
- SQLite数据库操作 (原始操作)
android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API, 使用该类可以完成对数据进行添加(Create).查询(Retrieve).更新(Update)和删除( ...
- BDD
Binding business requirements to .NET code http://www.specflow.org/ 行为驱动开发 BDD:Behavior Driven Devel ...
- 哞哞快的 C# 高斯模糊实现
冲动来自于 bing best 这个小工具,非常短小精干,里边的设置界面非常精美而且背景是一张模糊效果的图片,十分养眼,遂想,收集一下实现方式放到类库里以后肯定用得上.一通百度.谷歌.博客园,换了好多 ...