- 浏览: 23568 次
- 性别:
- 来自: 上海
最近访客 更多访客>>
最新评论
-
zhangzhimin2008:
inclxl 写道谢谢搂主了!那个default害我弄了半天! ...
Eclipse中安装Extjs插件(Spket IDE) -
thomas0988:
不愧是js的高手,我也要试试哦!
Eclipse中安装Extjs插件(Spket IDE) -
thomas0988:
哈哈哈,基哥现在是越来越牛啦!
Ext的layout布局 -
inclxl:
谢谢搂主了!那个default害我弄了半天!
Eclipse中安装Extjs插件(Spket IDE) -
fsdos:
好文章,希望再接再厉,多发表一些布局类的文章
Ext2.0布局类初步认识
Ext2.0框架的Grid使用介绍
最近空闲时间在学习Ext2.0框架,只有一个字的感叹“强”,我从未想到JS代码能够写出这么绚丽的Web页面出来,以前看到YUI,惊若天人,如今看到EXT2.0的东西,更是感觉震撼。
Ext2.0是一个JS框架,它的Grid控件和其它可以显示数据的控件,能够支持多种数据类型,如二维数组、Json数据和XML数据,甚至包括我们自定义的数据类型。Ext为我们提供了一个桥梁Ext.data.Store,通过它我们可以把任何格式的数据转化成grid可以使用的形式,这样就不需要为每种数据格式写一个grid的实现了。
首先,一个表格应该有列定义,即定义表头ColumnModel:
// 定义一个ColumnModel,表头中有四列
var cm = new Ext.grid.ColumnModel([
{header:'编号',dataIndex:'id'},
{header:'性别',dataIndex:'sex'},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
]);
cm.defaultSortable = true;
该ColumnModel定义了表格的四个列,其每列的名称和对应的数据键。请注意defaultSortable属性,即为每个列都安上一个可以排序的功能。如果只想某些列举有该功能,可以设置:
{header:'编号',dataIndex:'id',Sortable:true},
现在就来看看这个Ext.data.Store是如何转换三种数据的。
1.二维数组:
// ArrayData
var data = [
['1','male','name1','descn1'],
['2','male','name1','descn2'],
['3','male','name3','descn3'],
['4','male','name4','descn4'],
['5','male','name5','descn5']
];
// ArrayReader
var ds = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id',mapping: 0},
{name: 'sex',mapping: 1},
{name: 'name',mapping: 2},
{name: 'descn',mapping: 3}
])
});
ds.load();
ds要对应两个部分:proxy和reader。proxy告诉我们从哪里获得数据,reader告诉我们如何解析这个数据。
现在用的是Ext.data.MemoryProxy,它将内存中的数据data作为参数传递。Ext.data.ArrayReader专门用来解析数组,并且告诉我们它会按照定义的规范进行解析,每行按顺序读取四个数据,第一个叫id,第二个叫sex,第三个叫name,第四个descn。这些是跟cm定义中的dataIndex对应的。这样cm就知道哪列应该显示那条数据了。
mapping属性用于标记data中的读取后的数据与标头的映射关系,一般是不用设置的。但如果我们想让sex的数据中name栏中出现,可以设置mapping值。即id的mapping为2,后者为0。
记得要执行一次ds.load(),对数据进行初始化。
数据的显示显得非常简单:
HTML文件:
<div id='grid'></div>
JS文件:
var grid = new Ext.grid.GridPanel({
el: 'grid',
ds: ds,
cm: cm
});
grid.render();
其显示结果为:
2.如何在表格中添加CheckBox呢?
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),//自动行号
sm,//添加的地方
{header:'编号',dataIndex:'id'},
{header:'性别',dataIndex:'sex'},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
]);
var grid = new Ext.grid.GridPanel({
el: 'grid3',
ds: ds,
cm: cm,
sm: sm,//添加的地方
title: 'HelloWorld'
});
3. 如何做Grid上触发事件呢?
下面是一个cellclick事件
grid.addListener('cellclick', cellclick);
function cellclick(grid, rowIndex, columnIndex, e) {
var record = grid.getStore().getAt(rowIndex); //Get the Record
var fieldName = grid.getColumnModel().getDataIndex(columnIndex); //Get field name
var data = record.get(fieldName);
Ext.MessageBox.alert('show','当前选中的数据是'+data);
}
4.如何做Grid中做出快捷菜单效果:
grid.addListener('rowcontextmenu', rightClickFn);//右键菜单代码关键部分
var rightClick = new Ext.menu.Menu({
id:'rightClickCont', //在HTML文件中必须有个rightClickCont的DIV元素
items: [
{
id: 'rMenu1',
handler: rMenu1Fn,//点击后触发的事件
text: '右键菜单1'
},
{
//id: 'rMenu2',
//handler: rMenu2Fn,
text: '右键菜单2'
}
]
});
function rightClickFn(grid,rowindex,e){
e.preventDefault();
rightClick.showAt(e.getXY());
}
function rMenu1Fn(){
Ext.MessageBox.alert('right','rightClick');
}
其Grid如下:
5.如何将一列中的数据根据要求进行改变呢?
比如说性别字段根据其male或female改变显示的颜色,这种ColumnMode中设计:
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
sm,
{header:'编号',dataIndex:'id'},
{header:'性别',dataIndex:'sex',renderer:changeSex},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
]);
cm.defaultSortable = true;
function changeSex(value){
if (value == 'male') {
return "<span style='color:red;font-weight:bold;'>红男</span>";
} else {
return "<span style='color:green;font-weight:bold;'>绿女</span>";
}
}
其它两种数据的Grid显示是相同的,其不同之处在于数据获取的过程:
6.Json数据
至于这种数据的类型请大家自己看Ajax的书籍:
//JsonData
var data = {
'coders': [
{ 'id': '1', 'sex': 'male', 'name':'McLaughlin', 'descn': 'brett@newInstance.com' },
{ 'id': '2', 'sex': 'male','name':'Hunter', 'descn': 'jason@servlets.com' },
{ 'id': '3', 'sex': 'female','name':'Harold', 'descn': 'elharo@macfaq.com' },
{ 'id': '4', 'sex': 'male','name':'Harolds', 'descn': 'elhaross@macfaq.com' }
],
'musicians': [
{ 'id': '1', 'name': 'Clapton', 'descn': 'guitar' },
{ 'id': '2', 'name': 'Rachmaninoff', 'descn': 'piano' }
]
}
//ds使用的MemoryProxy对象和JsonReader对象
var ds = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.JsonReader({root: 'coders'}, [
{name: 'id'},
{name: 'sex'},
{name: 'name'},
{name: 'descn'}
])
});
ds.load();
var grid = new Ext.grid.GridPanel({
el: 'grid3',
ds: ds,
cm: cm,
sm: sm,
title: 'HelloWorld',
autoHeight: true//一定要写,否则显示的数据会少一行
});
grid.render();
7.使用XML数据:
注意,读取XML数据必须在服务器上进行。
XML数据test.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<results>2</results>
<item>
<id>1</id>
<sex>male</sex>
<name>Taylor</name>
<descn>Coder</descn>
</item>
</dataset>var ds3 = new Ext.data.Store({
url: 'test.xml', //XML数据
reader: new Ext.data.XmlReader({record: 'item'}, [ //使用XmlReader对象
{name: 'id'},
{name: 'sex'},
{name: 'name'},
{name: 'descn'}
])
});
8.从服务器获取数据和数据翻页控件
从一个服务器文件,如ASP、JSP或Servlet中获得数据二维Array、JSON或XML数据,也可以被Ext读取,并被Grid显示:
服务器文件data.asp:
<%
start = cint(request("start"))
limit = cint(request("limit"))
dim json
json=cstr("{totalProperty:100,root:[")
for i = start to limit + start-1
json =json + cstr("{'id':'") +cstr(i) + cstr("','name':'name") + cstr(i) + cstr("','descn':'descn") + cstr(i) + cstr("'}")
if i <> limit + start - 1 then
json =json + ","
end if
next
json = json +"]}"
response.write(json)
%>
我们可以看到,这个页面会根据传入的start和limit的不同,返回不同的数据,其实质是个分页的代码。下面是start=0,limit=10的JSON数据:
{totalProperty:100,root:[{'id':'0','name':'name0','descn':'descn0'},{'id':'1','name':'name1','descn':'descn1'},{'id':'2','name':'name2','descn':'descn2'},{'id':'3','name':'name3','descn':'descn3'},{'id':'4','name':'name4','descn':'descn4'},{'id':'5','name':'name5','descn':'descn5'},{'id':'6','name':'name6','descn':'descn6'},{'id':'7','name':'name7','descn':'descn7'},{'id':'8','name':'name8','descn':'descn8'},{'id':'9','name':'name9','descn':'descn9'}]}
我们使用分页控件来控制Grid的数据:
Ext.onReady(function(){
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
sm,
{header:'编号',dataIndex:'id'},
{header:'性别',dataIndex:'sex'},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
]);
cm.defaultSortable = true;
var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:'data.asp'}),
reader: new Ext.data.JsonReader({
totalProperty: 'totalProperty',
root: 'root'
}, [
{name: 'id'},
{name: 'name'},
{name: 'descn'}
])
});
ds.load({params:{start:0,limit:10}});
var grid = new Ext.grid.GridPanel({
el: 'grid3',
ds: ds,
cm: cm,
sm: sm,
title: 'ASP->JSON',
bbar: new Ext.PagingToolbar({
pageSize: 10,
store: ds,
displayInfo: true,
displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
emptyMsg: "没有记录"
}),
tbar: new Ext.PagingToolbar({
pageSize: 10,
store: ds,
displayInfo: true,
displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
emptyMsg: "没有记录"
})
});
grid.render();
})
10.如何在Grid的上方添加按钮呢?
添加按钮的关键之处在于tbar或bbar属性设置Toolbar工具条:
var grid = new Ext.grid.GridPanel({
el: 'grid3',
ds: ds,
cm: cm,
sm: sm,
title: 'HelloWorld',
tbar: new Ext.Toolbar({
items:[
{
id:'buttonA'
,text:"Button A"
,handler: function(){ alert("You clicked Button A"); }
}
,
new Ext.Toolbar.SplitButton({})
,{
id:'buttonB'
,text:"Button B"
,handler: function(){ alert("You clicked Button B"); }
}
,
'-'
,{
id:'buttonc'
,text:"Button c"
}
]
})
});
11.将GridPanel放入一个Panel或TabPanel中
var tabs = new Ext.TabPanel({
collapsible: true
,renderTo: 'product-exceptions'
,width: 450
,height:400
,activeTab: 0
,items:[
{
title: 'Unmatched'
},{
title: 'Matched'
}
]
});
tabs.doLayout();
var panel = new Ext.Panel({
renderTo: 'panel',
title:'panel',
collapsible:true,
width:450,
height:400,
items:[grid] //管理grid
});
Panel必须有DIV存在。其包含的Component有items管理。
评论
Ext.onReady(function(){
var data = {
"coders":[{"id":"1","sex":"male","name":"name1","descn":"descn1"},
{"id":"2","sex":"female","name":"name2","descn":"descn2"},
{"id":"3","sex":"male","name":"name3","descn":"descn3"},
{"id":"4","sex":"female","name":"name4","descn":"descn4"},
{"id":"5","sex":"male","name":"name1","descn":"descn1"},
{"id":"6","sex":"female","name":"name2","descn":"descn2"},
{"id":"7","sex":"male","name":"name3","descn":"descn3"},
{"id":"8","sex":"female","name":"name4","descn":"descn4"},
{"id":"9","sex":"male","name":"name1","descn":"descn1"},
{"id":"10","sex":"female","name":"name2","descn":"descn2"},
{"id":"11","sex":"male","name":"name3","descn":"descn3"},
{"id":"12","sex":"female","name":"name4","descn":"descn4"},
{"id":"13","sex":"male","name":"name1","descn":"descn1"},
{"id":"14","sex":"female","name":"name2","descn":"descn2"},
{"id":"15","sex":"male","name":"name3","descn":"descn3"},
{"id":"16","sex":"female","name":"name4","descn":"descn4"},
{"id":"17","sex":"male","name":"name1","descn":"descn1"},
{"id":"18","sex":"female","name":"name2","descn":"descn2"},
{"id":"19","sex":"male","name":"name3","descn":"descn3"},
{"id":"20","sex":"female","name":"name4","descn":"descn4"},
{"id":"21","sex":"male","name":"name1","descn":"descn1"},
{"id":"22","sex":"female","name":"name2","descn":"descn2"},
{"id":"23","sex":"male","name":"name3","descn":"descn3"},
{"id":"24","sex":"female","name":"name4","descn":"descn4"},
{"id":"25","sex":"male","name":"name1","descn":"descn1"},
{"id":"26","sex":"female","name":"name2","descn":"descn2"},
{"id":"27","sex":"male","name":"name3","descn":"descn3"},
{"id":"28","sex":"female","name":"name4","descn":"descn4"},
{"id":"29","sex":"male","name":"name1","descn":"descn1"},
{"id":"30","sex":"female","name":"name2","descn":"descn2"},
{"id":"31","sex":"male","name":"name3","descn":"descn3"},
{"id":"32","sex":"female","name":"name4","descn":"descn4"},
{"id":"33","sex":"male","name":"name1","descn":"descn1"},
{"id":"34","sex":"female","name":"name2","descn":"descn2"},
{"id":"35","sex":"male","name":"name3","descn":"descn3"},
{"id":"36","sex":"female","name":"name4","descn":"descn4"},
{"id":"37","sex":"male","name":"name5","descn":"descn5"}]
};
var ds = new Ext.data.Store({
proxy:new Ext.data.MemoryProxy(data),
reader:new Ext.data.JsonReader({root: 'coders'}, [
{name: 'id'},
{name: 'sex'},
{name: 'name'},
{name: 'descn'}
])
});
var cm = new Ext.grid.ColumnModel([
{header:"编号",dataIndex:"id"},
{header:"性别",dataIndex:"sex"},
{header:"名称",dataIndex:"name"},
{header:"描述",dataIndex:"descn"}
]);
cm.defaultSortable = true;
var grid = new Ext.grid.GridPanel({
el:"grid",
store:ds,
cm:cm,
bbar:new Ext.PagingToolbar({
pageSize:5,
store:ds,
displayInfo:true,
displayMsg: "Displaying topics {0} - {1} of {2}",
emptyMsg: "没有记录"
})
});
ds.load({params:{start:0,limit:5}});grid.render();
});
请帮忙指正一下,谢谢
发表评论
-
EXT2.0 多选下拉框
2008-07-11 14:49 3931预览: <INPUT TYPE="" ... -
Ext中FormPanel面板及Form控件横排测试(CSS)
2008-07-11 14:37 1658在实际的网页开发中,大部分时间都要涉及到Form表单的处理。 ... -
Ext2.0布局类初步认识
2008-06-26 16:41 1353Ext2.0正式版虽然还没出 ... -
Ext布局管理器 Layout Managers
2008-06-26 16:34 2806ContainerLayout 其它一切 ... -
Ext的layout布局
2008-06-26 16:15 3237Ext的layout布局对于建立W ... -
ext 常用类简单说明
2008-06-26 08:57 1379xtype-------- 类 --------- 说明 c ... -
js页面验证
2008-06-25 15:24 1994** * 取得字符串的字节长度 */ 1. functi ... -
JavaScript中的正则表达式解
2008-06-25 15:22 1124正则表达式是一个描述 ... -
Eclipse中安装Extjs插件(Spket IDE)
2008-06-25 15:22 2491Spket IDE是目前支持Ext 2.0最为出色的ID ...
相关推荐
### Ext2.0框架的Grid使用介绍 #### 一、Ext2.0框架概述 Ext2.0是一款基于JavaScript的库,它提供了大量的用户界面组件,使得开发人员能够轻松地构建出高度交互式的Web应用程序。相比其他框架如YUI等,Ext2.0拥有...
这个实用简明教程可能涵盖了EXT2.0的所有内容,并且可能深入到EXT3.x或更高版本的特性,如EXT JS的Grid Panel(表格面板)的高级功能、数据存储和远程数据加载、图表组件、拖放操作以及自定义组件的开发。...
1. **EXT组件的使用**:WebQQ应用可能大量使用EXT提供的组件,例如对话框(Dialog)、面板(Panel)、表格(Grid)等,这些组件使得开发者可以快速搭建功能丰富的界面。 2. **数据绑定**:EXT支持双向数据绑定,这...
本资料包包含"Ext中文手册"和"ExtJS 2.0实用简明教程",将帮助你深入理解和熟练运用ExtJS。 **Ext中文手册**: 该手册是ExtJS的中文版文档,全面覆盖了ExtJS的各种组件、类库、事件和方法。手册中详细解释了如何...
对于初学者,可以选择稳定版本,例如EXT2.0,但本教程以ext-1.1版本为例。下载后解压缩,EXT目录结构包括: - **package**:包含EXT的所有类库文件,其中`ext-all.js`整合了所有类。 - **resources**:包含图片...
在EXT2.0中文教程中,你会学到以下核心知识点: 1. **基础知识**:首先,教程会介绍JavaScript的基础,确保你对语言有扎实的理解,因为ExtJS是基于JavaScript构建的。接着,会讲解HTML和CSS,这些是网页开发的基础...
教程中的"ext2.0js"文件包含了EXTJS 2.0的核心库,开发者可以边学习边实践。同时,"extjs2.0例子"提供了示例代码,有助于理解和应用所学知识。 通过深入学习"掏钱学EXTJS完全版",开发者不仅能掌握EXTJS 2.0的核心...
EXTJS 提供了丰富的控件,如表格 (`Ext.grid.GridPanel`)、窗体 (`Ext.form.FormPanel`)、树形视图 (`Ext.tree.TreePanel`) 等。了解这些控件的基本使用方法以及如何结合实际项目进行应用,是提高开发效率的关键。 ...
例如,参考文章中提到的 wlr.easyjf.com 博客系统的源代码,这是一个使用 ExtJS 2.0 构建的单用户博客系统。虽然版本不同,但仍然可以从中学到很多关于如何构建复杂 Web 应用的知识。 #### 五、进一步学习资源 - *...
例如,`Ext.grid.Panel`是用于展示数据的表格组件,它可以与后端数据源紧密集成,实现数据的动态加载、排序和过滤。再比如,`Ext.form.Panel`则提供了一系列输入控件,如文本框、下拉列表等,便于构建表单界面。 ##...
首先,我们看到有一个名为"ExtJS2.0实用简明教程.chm"的文件,这很可能是一个关于ExtJS 2.0版本的离线帮助文档。CHM文件是Windows的帮助文件格式,通常包含章节、示例和索引,能够帮助用户系统地学习和查阅特定主题...