|
|
2011年11月9日
一、树面板简单示例
- var tree = Ext.create('Ext.tree.Panel', {
- title: '树面板简单示例',
- width : 150,
- height : 100,
- renderTo: Ext.getBody(),
- root: {
- text: '树根',
- expanded: true,
- children: [{
- text: '节点一',
- leaf: true
- }, {
- text: '节点二',
- leaf: true
- }]
- }
- });
var tree = Ext.create('Ext.tree.Panel', {
title: '树面板简单示例',
width : 150,
height : 100,
renderTo: Ext.getBody(),
root: {
text: '树根',//节点名称
expanded: true,//默认展开根节点
children: [{
text: '节点一',//节点名称
leaf: true//true说明为叶子节点
}, {
text: '节点二',//节点名称
leaf: true//true说明为叶子节点
}]
}
});
二、多列树示例
- var tree = Ext.create('Ext.tree.Panel', {
- title: 'TreeGrid(多列树示例)',
- renderTo: Ext.getBody(),
- width : 200,
- height : 120,
- fields: ['name', 'description'],
- columns: [{
- xtype: 'treecolumn',
- text: '名称',
- dataIndex: 'name',
- width: 100,
- sortable: true
- }, {
- text: '描述',
- dataIndex: 'description',
- flex: 1,
- sortable: true
- }],
- root: {
- name: '树根',
- description: '树根的描述',
- expanded: true,
- children: [{
- name: '节点一',
- description: '节点一的描述',
- leaf: true
- }, {
- name: '节点二',
- description: '节点二的描述',
- leaf: true
- }]
- }
- });
var tree = Ext.create('Ext.tree.Panel', {
title: 'TreeGrid(多列树示例)',
renderTo: Ext.getBody(),
width : 200,
height : 120,
fields: ['name', 'description'],
columns: [{
xtype: 'treecolumn',//树状表格列
text: '名称',
dataIndex: 'name',
width: 100,
sortable: true
}, {
text: '描述',
dataIndex: 'description',
flex: 1,
sortable: true
}],
root: {
name: '树根',
description: '树根的描述',
expanded: true,
children: [{
name: '节点一',
description: '节点一的描述',
leaf: true
}, {
name: '节点二',
description: '节点二的描述',
leaf: true
}]
}
});
三、树面板中的复选框示例
- var tree = Ext.create('Ext.tree.Panel', {
- title: '复选框示例',
- width : 150,
- height : 100,
- renderTo: Ext.getBody(),
- root: {
- text: '树根',
- expanded: true,
- children: [{
- text: '节点一',
- checked : true,
- leaf: true
- }, {
- text: '节点二',
- checked : false,
- leaf: true
- }]
- }
- });
一、addListener方法
- var button = Ext.get('btn');
- button.addListener('click',hello1);
- button.addListener('click',hello2);
var button = Ext.get('btn');
button.addListener('click',hello1);//绑定事件处理函数
button.addListener('click',hello2);
二、ExtJS支持的自定义事件
-
- var Person = Ext.extend(Ext.util.Observable,{
- constructor : function(name){
- this.name = name;
- this.sayNum = 0;
- this.say = function(){
- if(this.sayNum < 2){
- this.sayNum += 1;
- alert('I am '+name);
- }else{
- this.sayNum = 0;
- this.fireEvent('onSay',this);
- }
- }
- this.addEvents({
- "onSay" : true
- });
- }
- });
- var per = new Person('tom',3);
-
- per.addListener('onSay',function handler(){
- alert('发生了自定义事件');
- });
//创建Person类
var Person = Ext.extend(Ext.util.Observable,{
constructor : function(name){
this.name = name;
this.sayNum = 0;
this.say = function(){
if(this.sayNum < 2){
this.sayNum += 1;
alert('I am '+name);
}else{
this.sayNum = 0;//触发自定义事件后计数器归零
this.fireEvent('onSay',this);//激发自定义事件
}
}
this.addEvents({//加入自定义事件
"onSay" : true
});
}
});
var per = new Person('tom',3);//创建对象
//为自定义事件绑定处理函数
per.addListener('onSay',function handler(){
alert('发生了自定义事件');
});
- <input type='button' value='say' onclick='per.say()'>
<input type='button' value='say' onclick='per.say()'>
自定义事件的另外一个例子:
-
- var Person = Ext.extend(Ext.util.Observable,{
- constructor : function(name){
- this.name = name;
- this.say = function(){
- this.fireEvent('onSay',this.name);
- }
- this.addEvents({
- "onSay" : true
- });
- }
- });
- var per = new Person('tom');
-
-
- per.addListener('onSay',function(name){
- alert("I'am " + name);
- });
//继承自Ext.util.Observable
var Person = Ext.extend(Ext.util.Observable,{
constructor : function(name){
this.name = name;
this.say = function(){
this.fireEvent('onSay',this.name);//激发自定义事件
}
this.addEvents({//加入自定义事件
"onSay" : true
});
}
});
var per = new Person('tom');//创建对象
//为自定义事件绑定处理函数
per.addListener('onSay',function(name){
alert("I'am " + name);
});
拦截器使用示例Observable.capture,与上面例子不同的地方是“var per = new Person('tom');//创建对象”代码之后的内容替换为:
- per.addListener('onSay',handler);
- function handler(){
- alert('发生了自定义事件');
- }
-
- Ext.util.Observable.capture(per,captureFunction);
-
- function captureFunction(eventName){
- if(eventName == 'onSay'){
- alert("拦截事件:“"+eventName+"”。");
- return false;
- }
- return true;
- }
per.addListener('onSay',handler);//为自定义事件绑定处理函数
function handler(){//事件处理函数
alert('发生了自定义事件');
}
//为per对象添加拦截器
Ext.util.Observable.capture(per,captureFunction);
//拦截函数
function captureFunction(eventName){
if(eventName == 'onSay'){//事件名称是onSay则返回false终止事件的执行
alert("拦截事件:“"+eventName+"”。");
return false;
}
return true;
}
三、addManagedListener受管事件监听器:
- function createFn(){
- alert('新建');
- }
- function openFn(){
- alert('打开');
- }
- function saveFn(){
- alert('保存');
- }
- Ext.create('Ext.toolbar.Toolbar',{
- renderTo: Ext.getBody(),
- bodyPadding: 5,
- width:300,
- items : [
- {text:'新建',id:'createBtn',iconCls:'newIcon'},
- {text:'打开',id:'openBtn',iconCls:'openIcon'},
- {text:'保存',id:'saveBtn',iconCls:'saveIcon'},
- {text:'销毁新建按钮',handler : function(){
-
- Ext.getCmp('createBtn').destroy();
- }}
- ]
- });
- var createBtn = Ext.getCmp('createBtn');
- createBtn.on('click',createFn);
-
-
- createBtn.addManagedListener(Ext.getCmp('openBtn'),'click',openFn);
- createBtn.addManagedListener(Ext.getCmp('saveBtn'),'click',saveFn);
function createFn(){
alert('新建');
}
function openFn(){
alert('打开');
}
function saveFn(){
alert('保存');
}
Ext.create('Ext.toolbar.Toolbar',{//创建工具栏
renderTo: Ext.getBody(),
bodyPadding: 5,
width:300,
items : [
{text:'新建',id:'createBtn',iconCls:'newIcon'},
{text:'打开',id:'openBtn',iconCls:'openIcon'},
{text:'保存',id:'saveBtn',iconCls:'saveIcon'},
{text:'销毁新建按钮',handler : function(){
//销毁新建按钮
Ext.getCmp('createBtn').destroy();
}}
]
});
var createBtn = Ext.getCmp('createBtn');
createBtn.on('click',createFn);
//以下的事件绑定将受createBtn组件是否销毁的控制,如果createBtn组件销毁
//了则事件绑定同时解除。
createBtn.addManagedListener(Ext.getCmp('openBtn'),'click',openFn);
createBtn.addManagedListener(Ext.getCmp('saveBtn'),'click',saveFn);
四、relayEvents传播分发事件:
-
- var Employee = Ext.extend(Ext.util.Observable,{
- constructor : function(config){
- this.name = config.name;
- this.eat = function(){
- this.fireEvent('startEat',this);
- this.fireEvent('finishEat',this);
- }
- this.addEvents({
- "startEat" : true,
- "finishEat" : true
- });
- Employee.superclass.constructor.call(this, config)
- }
- });
-
-
- var Waiter = Ext.extend(Ext.util.Observable,{
- constructor : function(config){
- Waiter.superclass.constructor.call(this, config);
- }
- });
-
- var emp = new Employee({name:'tom'});
-
- emp.addListener('startEat',function(){
- alert(this.name + '开始吃饭了。');
- });
- emp.addListener('finishEat',function (){
- alert(this.name + '吃完饭,可以收拾盘子了。');
- });
-
- var waiter = new Waiter();
-
-
-
- waiter.relayEvents(emp, ['finishEat']);
- waiter.on('finishEat',function(){
- alert('服务员开始收拾盘子。');
- });
//创建Employee工人类
var Employee = Ext.extend(Ext.util.Observable,{
constructor : function(config){
this.name = config.name;
this.eat = function(){
this.fireEvent('startEat',this);//激发开始吃饭事件
this.fireEvent('finishEat',this);//激发结束吃饭事件
}
this.addEvents({//加入自定义事件
"startEat" : true,//开始吃饭事件
"finishEat" : true//结束吃饭事件
});
Employee.superclass.constructor.call(this, config)
}
});
//定义Waiter服务员类
var Waiter = Ext.extend(Ext.util.Observable,{
constructor : function(config){
Waiter.superclass.constructor.call(this, config);
}
});
//创建员工对象
var emp = new Employee({name:'tom'});
//为自定义事件绑定处理函数
emp.addListener('startEat',function(){
alert(this.name + '开始吃饭了。');
});
emp.addListener('finishEat',function (){
alert(this.name + '吃完饭,可以收拾盘子了。');
});
//创建服务员对象
var waiter = new Waiter();
//使服务员对象与员工对象的finishEat事件进行关联
//也就是说当员工对象的finishEat事件发生后,先执行自身的事件监听器,
//然后事件会传递到服务员对象中,激发服务员对象的finishEat事件。
waiter.relayEvents(emp, ['finishEat']);
waiter.on('finishEat',function(){
alert('服务员开始收拾盘子。');
});
- <input type='button' value='员工吃饭' onclick='emp.eat()'>
<input type='button' value='员工吃饭' onclick='emp.eat()'>
五、Ext.EventObject示例
- var btn = Ext.get('buttonTest');
- btn.addListener('click',handler);
- function handler(e){
-
- var x = e.getPageX();
-
- var y = e.getPageY();
- var msg = '事件发生坐标 : x='+x+' y='+y;
- alert(Ext.EventManager.getPageXY(e));
- alert(msg);
- }
var btn = Ext.get('buttonTest');
btn.addListener('click',handler);//为click事件绑定处理函数
function handler(e){//事件处理函数
//获取事件发生时的x坐标
var x = e.getPageX();
//获取事件发生时的y坐标
var y = e.getPageY();
var msg = '事件发生坐标 : x='+x+' y='+y;
alert(Ext.EventManager.getPageXY(e));
alert(msg);
}
六、Ext.EventManager使用
- Ext.EventManager.addListener('btn','click',handler);
- <HTML>
- <HEAD>
- <TITLE>远程数据源的组合框示例</TITLE>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <link rel="stylesheet" type="text/css" href="extjs4/resources/css/ext-all.css" />
- <script type="text/javascript" src="extjs4/bootstrap.js"></script>
- <script type="text/javascript" src="extjs4/ext-lang-zh_CN.js"></script>
- <script type="text/javascript">
- Ext.onReady(function(){
- //创建数据模型
- Ext.regModel('BookInfo', {
- fields: [{name: 'bookName'}]
- });
- //定义组合框中显示的数据源
- var bookStore = Ext.create('Ext.data.Store',{
- model : 'BookInfo',
- proxy: {
- type: 'ajax',//Ext.data.AjaxProxy
- url : 'bookSearchServer.jsp',
- reader: new Ext.data.ArrayReader({model : 'BookInfo'})
- }
- });
- //创建表单
- Ext.create('Ext.form.Panel',{
- title:'Ext.form.field.ComboBox远程数据源示例',
- frame : true,
- height:100,
- width:270,
- renderTo: Ext.getBody(),
- bodyPadding: 5,
- defaults:{//统一设置表单字段默认属性
- labelSeparator :':',//分隔符
- labelWidth : 70,//标签宽度
- width : 200,//字段宽度
- labelAlign : 'left'//标签对齐方式
- },
- items:[{
- xtype : 'combo',
- fieldLabel:'书籍列表',
- listConfig : {
- loadingText : '正在加载书籍信息',//加载数据时显示的提示信息
- emptyText : '未找到匹配值',//当值不在列表是的提示信息
- maxHeight : 100//设置下拉列表的最大高度为60像素
- },
- allQuery:'allbook',//查询全部信息的查询字符串
- minChars : 3,//下拉列表框自动选择前用户需要输入的最小字符数量
- queryDelay : 300,//查询延迟时间
- queryParam : 'searchbook',//查询的名字
- triggerAction: 'all',//单击触发按钮显示全部数据
- store : bookStore,//设置数据源
- displayField:'bookName',//定义要显示的字段
- valueField:'bookName',//定义值字段
- queryMode: 'remote'//远程模式
- }]
- });
- });
- </script>
- </HEAD>
- <BODY STYLE="margin: 10px">
- </BODY>
- </HTML>
<HTML>
<HEAD>
<TITLE>远程数据源的组合框示例</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="extjs4/resources/css/ext-all.css" />
<script type="text/javascript" src="extjs4/bootstrap.js"></script>
<script type="text/javascript" src="extjs4/ext-lang-zh_CN.js"></script>
<script type="text/javascript">
Ext.onReady(function(){
//创建数据模型
Ext.regModel('BookInfo', {
fields: [{name: 'bookName'}]
});
//定义组合框中显示的数据源
var bookStore = Ext.create('Ext.data.Store',{
model : 'BookInfo',
proxy: {
type: 'ajax',//Ext.data.AjaxProxy
url : 'bookSearchServer.jsp',
reader: new Ext.data.ArrayReader({model : 'BookInfo'})
}
});
//创建表单
Ext.create('Ext.form.Panel',{
title:'Ext.form.field.ComboBox远程数据源示例',
frame : true,
height:100,
width:270,
renderTo: Ext.getBody(),
bodyPadding: 5,
defaults:{//统一设置表单字段默认属性
labelSeparator :':',//分隔符
labelWidth : 70,//标签宽度
width : 200,//字段宽度
labelAlign : 'left'//标签对齐方式
},
items:[{
xtype : 'combo',
fieldLabel:'书籍列表',
listConfig : {
loadingText : '正在加载书籍信息',//加载数据时显示的提示信息
emptyText : '未找到匹配值',//当值不在列表是的提示信息
maxHeight : 100//设置下拉列表的最大高度为60像素
},
allQuery:'allbook',//查询全部信息的查询字符串
minChars : 3,//下拉列表框自动选择前用户需要输入的最小字符数量
queryDelay : 300,//查询延迟时间
queryParam : 'searchbook',//查询的名字
triggerAction: 'all',//单击触发按钮显示全部数据
store : bookStore,//设置数据源
displayField:'bookName',//定义要显示的字段
valueField:'bookName',//定义值字段
queryMode: 'remote'//远程模式
}]
});
});
</script>
</HEAD>
<BODY STYLE="margin: 10px">
</BODY>
</HTML>
JSP代码:
- <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
- <%
- String bookName = request.getParameter("searchbook");
- String jav = "['java编程思想'],['java入门'],['javascript程序设计']";
- String cpp = "['c++编程思想'],['c++入门'],['c++程序设计']";
- String php = "['php程序设计'],['php入门'],['php从入门到精通']";
- String books = "";
- if(bookName.equals("allbook")){
- books = "["+jav+","+cpp+","+php+"]";
- response.getWriter().write(books);
- return;
- }else{
- bookName = bookName.substring(0,3);//取查询字符串的前3个字符
- System.out.println(bookName);
-
- if(bookName.equals("jav")){
- books = "["+jav+"]";
- }else if(bookName.equals("c++")){
- books = "["+cpp+"]";
- }else if(bookName.equals("php")){
- books = "["+php+"]";
- }else{
- books = "[['没有数据']]";
- }
- response.getWriter().write(books);
- }
- %>
|