- 浏览: 7944338 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
继续其读书笔记
1 ext js事件绑定方式
var button = Ext.get('btn');
button.addListener('click',hello1);//绑定事件处理函数
button.addListener('click',hello2);
可以支持多事件绑定,执行顺序固定,支持延迟调用等优点
2 自定义事件
//创建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');//创建对象
//为自定义事件绑定处理函数
per.addListener('onSay',function handler(){
alert('发生了自定义事件');
});
</script>
上面点第3次后,触发了自定义事件
3 EXT JS的事件执行过程:添加事件(addevent),拦截事件(capture),激发事件(fireevent)
4 addevents,fireevent,addlistener
//继承自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);
});
</script>
</HEAD>
<BODY>
<input type='button' value='say' onclick='per.say()'>
</BODY>
5 capture例子
//继承自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',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;
}
会输出:拦截事件:onsay;
6 addmanagerlistener事件监听器
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);
7 relayevents
<script type="text/javascript">
//创建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('服务员开始收拾盘子。');
});
</script>
8 ext.eventobject对象
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);
}
9 EVENTMANAGER
Ext.onReady(function(){
Ext.EventManager.addListener('btn','click',handler);//绑定处理函数
function handler(){//事件处理函数
alert('hello');
}
});
10 EXT.AJAX.REQUEST示例
1) 简单示例
Ext.onReady(function(){
var requestConfig = {
url :'loginServer.jsp',//请求的服务器地址
params : {userName : 'tom',password : '123'},//请求参数
customer : '自定义属性',//附加属性
callback : function(options,success,response){//回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText,
"本地自定义属性:",options.customer];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig);//发送请求
2) 异步表单
function login(){
var requestConfig = {
url :'loginServer.jsp',//请求的服务器地址
form : 'loginForm',//指定要提交的表单id
callback : function(options,success,response){//回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig);//发送请求
3)提交JSON对象
function login(){
var requestConfig = {
url :'loginServerJson.jsp', //请求的服务器地址
jsonData : getJson(), //发送json对象
callback : function(options,success,response){ //回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig); //发送请求
}
//生成json对象
function getJson(){
var name = document.forms['loginForm'].userName.value; //获取表单中的用户名信息
var pwd = document.forms['loginForm'].password.value; //获取表单中的密码信息
var jsonObj = { //创建包含用户名信息和密码信息的JSON对象
userName : name,
password : pwd
}
return jsonObj; //将JSON对象返回
}
服务端jSP
<%
BufferedReader in = request.getReader();
StringBuffer jsonStr = new StringBuffer();
String str = "";
while((str=in.readLine())!=null){
jsonStr.append(str);
}
JSONObject jsonObj = JSONObject.fromObject(jsonStr.toString());
String userName = jsonObj.getString("userName");
String password = jsonObj.getString("password");
String msg = "";
if(userName.equals("tom") && password.equals("123")){
msg = "登陆成功'json方式'";
}else{
msg = "登陆失败'json方式'";
}
response.getWriter().write(msg);
%>
11 ext.elemntloader:提供一个AJAX风格的更新操作。
1)简单加载
Ext.onReady(function(){
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('content-div').getLoader();
var btns = Ext.select('input');//选择页面中的所有input组件
btns.addListener('click',function(e,btn){//成批绑定click事件
var contentUrl = '9-5-'+btn.value+'.html';
load(contentUrl);//调用加载函数
});
//定义更新函数
function load(contentUrl){
loader.load({//调用元素加载器的load方法,更新页面元素
url : contentUrl,
loadMask : '正在加载数据请稍后...'
});
}
})
<div id="content-div" style="width:200px; height:100px; border:2px solid #ccc"></div>
<input type=button value='page1'>
<input type=button value='page2'>
2)自定义函数更新
Ext.onReady(function(){
var btns = Ext.get('updateBtn');//选择页面中id为updateBtn的元素
btns.on('click',update);//绑定单击事件
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('content-div').getLoader();
//定义更新函数
function update(){
loader.load({//调用更新器的update方法,更新页面元素
url : 'timeServer.jsp',
//自定义渲染函数
renderer : function(loader,response,request){
var time = Ext.getDom('serverTime');
//获取响应数据
time.value = response.responseText;
}
});
}
});
</script>
<BODY STYLE="margin: 10px">
<div id="content-div" style="width:200px; height:100px; border:2px solid #ccc">
<table width=100%>
<tr><td width=150>服务器时间:</td></tr>
<tr><td><input id='serverTime' type='text'/></td></tr>
<tr><td colspan=2><input type=button value='更新时间' id='updateBtn'></td></tr>
</table>
</div>
</BODY>
3) 自动定时更新
Ext.onReady(function(){
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('serverTime').getLoader();
Ext.get('startAutoBtn').on('click',startAutoUpdate);
Ext.get('stopAutoBtn').on('click',stopAutoUpdate);
function startAutoUpdate(){
//开始定时自动刷新
loader.startAutoRefresh(1000,{
url : 'timeServer.jsp'
});
}
function stopAutoUpdate(){
//停止定时自动刷新
loader.stopAutoRefresh();
}
})
12 EXT.template
1) Ext.onReady(function(){
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{0}</td></tr>',
'<tr><td>年龄</td><td>{1}</td></tr>',
'<tr><td>性别</td><td>{2}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',['小王',25,'男']);
});
2) Ext.template.overwrite JSON对象方式
Ext.onReady(function(){
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{name}</td></tr>',
'<tr><td>年龄</td><td>{age}</td></tr>',
'<tr><td>性别</td><td>{sex}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.overwrite('tpl-table',{name:'小王',age:25,sex:'男'});
});
//注意这里是使用了jSON方式了
3) 模版中使用格式化函数
Ext.onReady(function(){
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template([
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>员工姓名</td>',
//{userName:capitalize}使用标准字符串格式化函数,字符串首字母大写
'<td width=120>{userName:capitalize}</td></tr>',
'<tr><td width=90>工作日期</td>',
//{WorkDate:this.cusFormat()}使用自定义格式化函数
'<td width=120>{WorkDate:this.cusFormat()}</td></tr>',
'</table>'
]);
//定义模板数据
var tplData = {
userName : 'tom',
WorkDate : new Date(2002,7,1)
}
//模板的自定义格式化函数
tpl.cusFormat = function(date,o){
return Ext.Date.format(date,'Y年m月d');
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
4) 自定义格式解析多层函数
Ext.onReady(function(){
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td>',
'<td width=120>{name}</td></tr>',
'<tr><td width=90 >年龄</td>',
'<td width=120>{age}</td></tr>',
'<tr><td width=90 >身高</td>',
'<td width=120>{stature:this.parseJson}</td></tr>',
'</table>'
);
//定义模板数据
var tplData = {
name : 'tom',
age : 24,
stature : {
num : 170,
unit : 'cm'
}
}
//通过自定义格式化函数解析json对象
tpl.parseJson = function(json){
return json.num + json.unit;
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
13 Ext.xtemplate高级
1) 在其中使用for
Ext.onReady(function(){
//定义模板,使用tpl标签和for运算符
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td></tr>',
'<tpl for=".">',
'<tr><td>{name}</td><td>{age}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = [
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
2) 在子模版中访问父模版数据
Ext.onReady(function(){
//定义模板,使用parent在子模板中访问父对象
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td><td width=90 >公司</td></tr>',
'<tpl for="emps">',
'<tr><td>{name}</td><td>{age}</td><td>{parent.companyName}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = {
companyName : 'ACB公司',
emps:[
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
3) 还可以使用逻辑判断条件
'<tpl if="wage > 1000">',
4) 在模版中执行任意代码
Ext.onReady(function(){
//定义模板,在模板中执行任意代码
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td>序号</td><td width=90 >姓名</td><td width=90 >工资</td><td width=90 >奖金
</td></tr>',
'<tpl for="emps">',
'<tr class="{[xindex % 2 == 0 ? "even" : "odd"]}">',
'<td>{[xindex]}</td><td>{[values.name]}</td>',
'<td>{[values.wage * parent.per]}</td>',
'<td>{[Math.round(values.wage * parent.per / xcount)]}</td></tr>',
'</tpl>',
'<tr><td>发薪时间</td><td colspan=3>{[fm.date(new Date,"Y年m月d日")]}</td></tr>',
'<tr><td>工资总计</td><td colspan=3>{[this.avgWage(values)]}</td></tr>',
'</table>'
);
//模板的自定义格式化函数,用于计算工资总计
tpl.avgWage = function (o) {
var sum = 0;
var length = o.emps.length;
for(var i = 0 ; i <length ; i++){
sum += o.emps[i].wage;
}
return sum * o.per;
}
//定义模板数据,per表示发薪比例,wage表示标准工资
var tplData = {
per : 0.9,
emps : [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
5) 使用模版成员函数
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td width=90 >姓名</td><td width=90 >工资</td></tr>',
'<tpl for=".">',
'<tpl if="this.check(wage)">',
'<tr><td>{name}</td>',
'<td>{[this.format(values.wage)]}</td>',
'</tpl></tpl>',
'</table>',
{
//定义模板成员函数
check : function(wage) {
if(wage > 1000){
return true;
}else {
return false
}
},
//定义模板成员函数
format : function(wage) {
if(wage > 1300){
return '<font color=red>'+wage+'</font>';
}else {
return '<font color=blue>'+wage+'</font>';
}
}
}
);
14 EXT.VIEW视图
使用Xtemplate作为内置模版将与ext.data.store绑定,STORE的变化会反映在视图中
//产品数据视图
var productView = Ext.create('Ext.view.View',{
store: productStore, //数据源
tpl: productTpl, //视图
deferEmptyText : false,
itemSelector:'div.thumb-wrap',
emptyText: '请录入商品'
});
1 ext js事件绑定方式
var button = Ext.get('btn');
button.addListener('click',hello1);//绑定事件处理函数
button.addListener('click',hello2);
可以支持多事件绑定,执行顺序固定,支持延迟调用等优点
2 自定义事件
//创建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');//创建对象
//为自定义事件绑定处理函数
per.addListener('onSay',function handler(){
alert('发生了自定义事件');
});
</script>
上面点第3次后,触发了自定义事件
3 EXT JS的事件执行过程:添加事件(addevent),拦截事件(capture),激发事件(fireevent)
4 addevents,fireevent,addlistener
//继承自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);
});
</script>
</HEAD>
<BODY>
<input type='button' value='say' onclick='per.say()'>
</BODY>
5 capture例子
//继承自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',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;
}
会输出:拦截事件:onsay;
6 addmanagerlistener事件监听器
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);
7 relayevents
<script type="text/javascript">
//创建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('服务员开始收拾盘子。');
});
</script>
8 ext.eventobject对象
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);
}
9 EVENTMANAGER
Ext.onReady(function(){
Ext.EventManager.addListener('btn','click',handler);//绑定处理函数
function handler(){//事件处理函数
alert('hello');
}
});
10 EXT.AJAX.REQUEST示例
1) 简单示例
Ext.onReady(function(){
var requestConfig = {
url :'loginServer.jsp',//请求的服务器地址
params : {userName : 'tom',password : '123'},//请求参数
customer : '自定义属性',//附加属性
callback : function(options,success,response){//回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText,
"本地自定义属性:",options.customer];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig);//发送请求
2) 异步表单
function login(){
var requestConfig = {
url :'loginServer.jsp',//请求的服务器地址
form : 'loginForm',//指定要提交的表单id
callback : function(options,success,response){//回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig);//发送请求
3)提交JSON对象
function login(){
var requestConfig = {
url :'loginServerJson.jsp', //请求的服务器地址
jsonData : getJson(), //发送json对象
callback : function(options,success,response){ //回调函数
var msg = ["请求是否成功:" ,success,"\n",
"服务器返回值:",response.responseText];
alert(msg.join(''));
}
}
Ext.Ajax.request(requestConfig); //发送请求
}
//生成json对象
function getJson(){
var name = document.forms['loginForm'].userName.value; //获取表单中的用户名信息
var pwd = document.forms['loginForm'].password.value; //获取表单中的密码信息
var jsonObj = { //创建包含用户名信息和密码信息的JSON对象
userName : name,
password : pwd
}
return jsonObj; //将JSON对象返回
}
服务端jSP
<%
BufferedReader in = request.getReader();
StringBuffer jsonStr = new StringBuffer();
String str = "";
while((str=in.readLine())!=null){
jsonStr.append(str);
}
JSONObject jsonObj = JSONObject.fromObject(jsonStr.toString());
String userName = jsonObj.getString("userName");
String password = jsonObj.getString("password");
String msg = "";
if(userName.equals("tom") && password.equals("123")){
msg = "登陆成功'json方式'";
}else{
msg = "登陆失败'json方式'";
}
response.getWriter().write(msg);
%>
11 ext.elemntloader:提供一个AJAX风格的更新操作。
1)简单加载
Ext.onReady(function(){
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('content-div').getLoader();
var btns = Ext.select('input');//选择页面中的所有input组件
btns.addListener('click',function(e,btn){//成批绑定click事件
var contentUrl = '9-5-'+btn.value+'.html';
load(contentUrl);//调用加载函数
});
//定义更新函数
function load(contentUrl){
loader.load({//调用元素加载器的load方法,更新页面元素
url : contentUrl,
loadMask : '正在加载数据请稍后...'
});
}
})
<div id="content-div" style="width:200px; height:100px; border:2px solid #ccc"></div>
<input type=button value='page1'>
<input type=button value='page2'>
2)自定义函数更新
Ext.onReady(function(){
var btns = Ext.get('updateBtn');//选择页面中id为updateBtn的元素
btns.on('click',update);//绑定单击事件
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('content-div').getLoader();
//定义更新函数
function update(){
loader.load({//调用更新器的update方法,更新页面元素
url : 'timeServer.jsp',
//自定义渲染函数
renderer : function(loader,response,request){
var time = Ext.getDom('serverTime');
//获取响应数据
time.value = response.responseText;
}
});
}
});
</script>
<BODY STYLE="margin: 10px">
<div id="content-div" style="width:200px; height:100px; border:2px solid #ccc">
<table width=100%>
<tr><td width=150>服务器时间:</td></tr>
<tr><td><input id='serverTime' type='text'/></td></tr>
<tr><td colspan=2><input type=button value='更新时间' id='updateBtn'></td></tr>
</table>
</div>
</BODY>
3) 自动定时更新
Ext.onReady(function(){
//得到元素的加载器对象(Ext.ElementLoader)
var loader = Ext.get('serverTime').getLoader();
Ext.get('startAutoBtn').on('click',startAutoUpdate);
Ext.get('stopAutoBtn').on('click',stopAutoUpdate);
function startAutoUpdate(){
//开始定时自动刷新
loader.startAutoRefresh(1000,{
url : 'timeServer.jsp'
});
}
function stopAutoUpdate(){
//停止定时自动刷新
loader.stopAutoRefresh();
}
})
12 EXT.template
1) Ext.onReady(function(){
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{0}</td></tr>',
'<tr><td>年龄</td><td>{1}</td></tr>',
'<tr><td>性别</td><td>{2}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',['小王',25,'男']);
});
2) Ext.template.overwrite JSON对象方式
Ext.onReady(function(){
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{name}</td></tr>',
'<tr><td>年龄</td><td>{age}</td></tr>',
'<tr><td>性别</td><td>{sex}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.overwrite('tpl-table',{name:'小王',age:25,sex:'男'});
});
//注意这里是使用了jSON方式了
3) 模版中使用格式化函数
Ext.onReady(function(){
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template([
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>员工姓名</td>',
//{userName:capitalize}使用标准字符串格式化函数,字符串首字母大写
'<td width=120>{userName:capitalize}</td></tr>',
'<tr><td width=90>工作日期</td>',
//{WorkDate:this.cusFormat()}使用自定义格式化函数
'<td width=120>{WorkDate:this.cusFormat()}</td></tr>',
'</table>'
]);
//定义模板数据
var tplData = {
userName : 'tom',
WorkDate : new Date(2002,7,1)
}
//模板的自定义格式化函数
tpl.cusFormat = function(date,o){
return Ext.Date.format(date,'Y年m月d');
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
4) 自定义格式解析多层函数
Ext.onReady(function(){
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td>',
'<td width=120>{name}</td></tr>',
'<tr><td width=90 >年龄</td>',
'<td width=120>{age}</td></tr>',
'<tr><td width=90 >身高</td>',
'<td width=120>{stature:this.parseJson}</td></tr>',
'</table>'
);
//定义模板数据
var tplData = {
name : 'tom',
age : 24,
stature : {
num : 170,
unit : 'cm'
}
}
//通过自定义格式化函数解析json对象
tpl.parseJson = function(json){
return json.num + json.unit;
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
13 Ext.xtemplate高级
1) 在其中使用for
Ext.onReady(function(){
//定义模板,使用tpl标签和for运算符
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td></tr>',
'<tpl for=".">',
'<tr><td>{name}</td><td>{age}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = [
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
2) 在子模版中访问父模版数据
Ext.onReady(function(){
//定义模板,使用parent在子模板中访问父对象
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td><td width=90 >公司</td></tr>',
'<tpl for="emps">',
'<tr><td>{name}</td><td>{age}</td><td>{parent.companyName}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = {
companyName : 'ACB公司',
emps:[
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
3) 还可以使用逻辑判断条件
'<tpl if="wage > 1000">',
4) 在模版中执行任意代码
Ext.onReady(function(){
//定义模板,在模板中执行任意代码
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td>序号</td><td width=90 >姓名</td><td width=90 >工资</td><td width=90 >奖金
</td></tr>',
'<tpl for="emps">',
'<tr class="{[xindex % 2 == 0 ? "even" : "odd"]}">',
'<td>{[xindex]}</td><td>{[values.name]}</td>',
'<td>{[values.wage * parent.per]}</td>',
'<td>{[Math.round(values.wage * parent.per / xcount)]}</td></tr>',
'</tpl>',
'<tr><td>发薪时间</td><td colspan=3>{[fm.date(new Date,"Y年m月d日")]}</td></tr>',
'<tr><td>工资总计</td><td colspan=3>{[this.avgWage(values)]}</td></tr>',
'</table>'
);
//模板的自定义格式化函数,用于计算工资总计
tpl.avgWage = function (o) {
var sum = 0;
var length = o.emps.length;
for(var i = 0 ; i <length ; i++){
sum += o.emps[i].wage;
}
return sum * o.per;
}
//定义模板数据,per表示发薪比例,wage表示标准工资
var tplData = {
per : 0.9,
emps : [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
});
5) 使用模版成员函数
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td width=90 >姓名</td><td width=90 >工资</td></tr>',
'<tpl for=".">',
'<tpl if="this.check(wage)">',
'<tr><td>{name}</td>',
'<td>{[this.format(values.wage)]}</td>',
'</tpl></tpl>',
'</table>',
{
//定义模板成员函数
check : function(wage) {
if(wage > 1000){
return true;
}else {
return false
}
},
//定义模板成员函数
format : function(wage) {
if(wage > 1300){
return '<font color=red>'+wage+'</font>';
}else {
return '<font color=blue>'+wage+'</font>';
}
}
}
);
14 EXT.VIEW视图
使用Xtemplate作为内置模版将与ext.data.store绑定,STORE的变化会反映在视图中
//产品数据视图
var productView = Ext.create('Ext.view.View',{
store: productStore, //数据源
tpl: productTpl, //视图
deferEmptyText : false,
itemSelector:'div.thumb-wrap',
emptyText: '请录入商品'
});
发表评论
-
微信开发工具中时间问题的小坑
2018-02-07 19:07 826刚开始用微信小程序开发工具,每次运行任何应用,都报这个错误: ... -
三篇不错的介绍CSS GRID的文章
2017-12-06 09:08 553三篇不错的介绍CSS GRID的文章: http://www. ... -
双因素认证(2FA)教程
2017-11-03 09:16 1572http://www.ruanyifeng.com/blog/ ... -
es6 中的export
2017-08-20 08:00 822https://juejin.im/post/5998625f ... -
markdown中的空格
2017-08-20 07:53 1702即使手动输入空格, 也是很不推荐的方法。我推荐全角空格,切换 ... -
(转)讲真,别再使用JWT了
2017-08-17 23:21 1013不错的好文: http://insights.thoughtw ... -
(转)手把手教你WebStorm+chrome实现时时调试刷新
2017-08-15 10:50 3027参考: http://jingyan.baidu.com/ar ... -
IntelliJ Idea 2017 免费激活方法
2017-08-15 09:38 93221. 到网站 http://idea.lanyus.com/ ... -
前端框架这么多,该何去何从?
2017-08-04 07:17 649http://insights.thoughtworkers. ... -
记录一个HTML 5画拓扑图的商业公司
2017-07-18 19:56 850http://qunee.com/ DEMO:http:// ... -
vue 2例子学习收集
2017-07-16 11:46 10081 vue2.0手撸闲鱼App https://githu ... -
(收藏)虚拟DOM内部是如何工作的
2017-07-13 22:08 593虚拟DOM内部是如何工作的 https://segmentfa ... -
最近看到的几篇精彩JAVASCRIPT博客文章推荐
2017-07-11 07:10 569【深度长文】JavaScript数组所有API全解密 http ... -
jsonp 跨域原理:深入浅出 jsonp
2017-07-10 19:55 1431https://lzw.me/a/jsonp.html jso ... -
(转)深度长文-JavaScript数组所有API全解密
2017-07-08 19:59 824深度长文-JavaScript数组所有API全解密 http: ... -
(收藏)网页导出PDF的方案
2017-07-06 07:13 984(收藏)网页导出PDF的方案 https://yiqiwuli ... -
Chromium 新的弹窗机制以及 HTML 的 <dialog> 元素
2017-06-28 12:37 1151https://juejin.im/post/59525195 ... -
国内一个不错的大屏UI设计厂家
2017-06-03 19:43 3160http://www.lanlanwork.com/dp.ph ... -
canvas仿芝麻信用分仪表盘
2017-05-28 20:21 1592canvas仿芝麻信用分仪表盘 https://segment ... -
(转)CSS 变量教程
2017-05-10 21:12 580http://www.ruanyifeng.com/blog/ ...
相关推荐
总结来说,"Extjs4 grid使用例子"是一个实践教程,展示了如何在MVC架构下利用ExtJS4的Grid组件处理数据,实现数据的增删改功能。通过这个例子,开发者可以学习到MVC的设计理念,以及如何有效利用Grid组件提升Web应用...
目录 1. ExtJs 结构树 2 ...25. extJs 2.0学习笔记(Ext.Element API总结) 69 26. extJs 2.0学习笔记(Element.js篇) 73 27. extJs 2.0学习笔记(DomHelper.js篇) 76 28. extJs 2.0学习笔记(ext.js篇) 77
总结起来,在Eclipse中开发Extjs4代码,我们需要: 1. 安装Eclipse并确保其支持JavaScript开发。 2. 安装Spket插件以获取代码提示和智能感知功能。 3. 导入`ext-40.jsb2`文件,使Spket理解ExtJS4的API。 4. 获取...
总结起来,EXTJS4的学习资料涵盖了如何设置开发环境、采用MVC模式组织代码、搭建应用框架以及使用EXTJS4的动态加载功能和CSS美化界面等关键知识点。通过这些内容,读者可以逐步掌握EXTJS4的开发流程和技术要点,为...
在"ExtJS4 2学习 21 动态菜单与表格数据展示操作总结篇"中,我们将深入探讨两个核心组件:动态菜单(Dynamic Menus)和表格数据展示(Grid Data Display),以及如何在实际应用中进行操作。 动态菜单在Web应用中...
这个项目里面包含了本人从开始初学EXTJS4的全部事例:grid、tree、chart图表、文件上传、mvc、还有用户信息注册。里面的一些难点、要点都加了注释,还有一个file.txt文件是本人的小小总结,还没完整。我也是一个第一...
总结来说,这个EXTJS4开发的图片文章管理项目实例展示了前端EXTJS4的强大UI构建能力,后端JAVA的稳定处理性能,以及MYSQL数据库的数据存储功能。通过学习这个实例,开发者可以深入理解EXTJS4的MVC架构,JAVA的Web...
### Extjs4 权威指南知识点总结 #### 一、Extjs4简介与获取途径 - **概述**:Extjs4是一款基于JavaScript的企业级富客户端Web应用程序开发框架,旨在简化前端开发过程,提供丰富的UI组件和强大的数据处理能力。 - ...
总结来说,"ssh+extjs4整合开发"涉及到的技术栈是Java后端开发的强大组合,结合了Spring的灵活性、Struts2的MVC架构以及Hibernate的对象关系映射,再加上EXTJS4的富客户端能力。这种整合使得开发者能够构建出高效、...
在提供的压缩包文件"extjs4.1_TreeGrid"中,可能包含了一些EXTJS 4树形表格组件的示例代码和资源,通过学习和分析这些示例,你可以更好地理解如何在项目中应用这个组件。 总结来说,EXTJS 4的树形表格组件是一个...
总结,ExtJS4.0 的 MVC 实现为开发者提供了强大的工具来构建复杂的 Web 应用。通过理解并熟练运用 MVC 架构模式,我们可以创建出具有高效数据管理、灵活用户交互和易于维护的 ExtJS 应用程序。学习和掌握这些知识,...
### ExtJS4 学习指南知识点详述 #### 一、ExtJS4简介与环境搭建 **1. 获取ExtJS4** - **途径:** 可以通过官方网站 [http://extjs.org.cn/](http://extjs.org.cn/) 获取最新的ExtJS4版本及相关资源。 **2. 搭建...
总结而言,Extjs4开发笔记提供了开发一个基于Extjs4框架和MVC模式的员工管理系统的过程和细节。作者从准备工作讲起,到环境配置、目录结构、文件分离,再到框架搭建,每个环节都详细记录了其开发经验和遇到的问题。...
ExtJS 4 是一款强大的JavaScript框架,用于构建富客户端应用程序。...提供的"Extjs4Charts图表"压缩包文件应该包含了预设的图表示例,可以直接运行查看效果,对于初学者来说,这是一个很好的学习资源。
### Extjs 学习——总结的一些常用知识点 #### 一、概述 Extjs 是一个用于构建 Web 应用程序的强大框架,它提供了大量的 UI 组件和功能,可以帮助开发者快速搭建出高质量的应用界面。本文将根据一个月的学习经验,...
总结来说,"Extjs4 + Asp.net MVC Demo"是一个很好的学习资源,它演示了如何利用这两种技术构建松耦合的Web应用,实现高效的页面交互和数据管理。通过学习这个Demo,开发者可以掌握前端MVC的组织方式,了解如何在...
以上是对 ExtJS 4.0 技术中文视频中的主要知识点的总结。这些视频涵盖了 ExtJS 4.0 的各个方面,从基础概念到高级功能均有涉及,适合不同程度的学习者观看。希望这些知识点能帮助大家更好地理解和掌握 ExtJS 4.0 的...
【EXTJS 4 开发笔记】系列主要针对初学者,详细介绍了如何使用EXTJS 4进行项目开发,尤其是采用MVC模式。...对于初学者来说,这是一个逐步学习EXTJS 4开发的良好起点,能够帮助他们理解EXTJS 4的核心特性和最佳实践。
2. **对 ExtJs 的态度**:学习任何技术都需要有积极的态度,理解其设计理念和最佳实践,以便更好地利用其优点并解决可能出现的问题。 3. **Ext.form**:Ext.form 包含了一系列用于创建表单组件和表单布局的类,如...
总结来说,ExtJS 4的Chart组件提供了一种直观、灵活的方式来创建曲线图,结合其丰富的配置选项和强大的数据处理能力,使得在Web应用中实现数据可视化变得简单易行。通过学习和掌握这些知识,开发者可以构建出具有...