• 实用Ext第一步当然是引用jar包啦。 下载地址

    在页面上加上div用于显示这也是必须的

    <div id='loginpanel' ></div>

    在js中我们肯定需要将Ext进行初始化,我们的Ext初始化仅需两步

    Ext.QuickTips.init();
    Ext.state.Manager.setProvider(newExt.state.CookieProvider());

    初始化Ext状态管理器,在Cookie中记录用户的操作状态,如果不启用,象刷新时就不会保存当前的状态,而是重新加载

    象如果窗口中有用可拖动面板的话,你在拖动后如果启动了Ext.state.Manager.setProvider(new Ext.state.CookieProvider()),就算刷新后面板仍然会在你拖动后的位置。如果不启用的话是不是就会按照默认的排列方式排列


  • Ext的特点就是不需要jsp,我们所有的空间都在js中借助Ext来创建。现在我们来创建几个空间来看看效果吧

    var loginNames = new Ext.form.TextField({
    name : 'userName',
    width:140,
    allowBlank : false,
    maxLength : 16,
    fieldLabel : Label_Login.loginName,
    listeners : {
    'specialkey' : function(f, e) {
    if (e.getKey() == Ext.EventObject.ENTER) {
    loginForm.form.findField('password').focus(
    true, false);
    }
    }
    },
    blankText : Label_Login.loginNameBlank // '用户名不能为空'
    // regex:/^[0-9a-zA-Z]{2,20}$/,
    // regexText:'只能为两到二十位的大小写字母。',
    });

【脚注】

上面代码详解点这里1

var loginPasswords = new Ext.form.TextField({
name : 'password',
allowBlank : false,
width:140,
maxLength : 16,
inputType : 'password',
fieldLabel : Label_Login.loginPassword,
listeners : {
'specialkey' : function(f, e) {
if (e.getKey() == Ext.EventObject.ENTER) {
loginFunc();
}
}
},
blankText : Label_Login.loginPasswordBlank // 密码不能为空
// regex:/^.{1,}$/,
// regexText:'长度不能少于1位'
}); // '登陆',
var loginBtn = new Ext.Button({
name : 'loginBtn',
anchor : '100%',
style : 'margin-left:25px;',
text : Label_Button.login,
handler : function(){
loginFunc();
}
}); // '取消'
var resetButton = new Ext.Button({
style : 'margin-left:25px;',
anchor : '100%',
text : Label_Button.reset,
handler : function(){
//loginForm.getForm().reset();
loginForm.form.findField('userName').setValue('请输入用户名');
loginForm.form.findField('password').setValue('请输入密码');
}
}); // 定义loginForm panel
var loginForm = new Ext.FormPanel( {
//defaultType : 'textfield',
id : 'login',
labelWidth : 70,
style : 'background:#ffffff;padding:25px 35px 30px 16px;',
region : "center",
defaults : {
border : false,
allowBlank : false,
msgTarget : 'side'
//blankText : '该字段不允许为空'
},
waitMsgTarget : true,
items : [loginNames,loginPasswords,{
layout :'column',
border : false,
width : '100%',
items : [ {
columnWidth : 0.73,
border : false,
layout : 'form',
items : [ remPwdCheckBox ]
}, {
columnWidth : 0.27,
border : false,
layout : 'form',
style : 'margin-top:3px;',
html : '<a href=\"javascript:void(0);return false;\" onclick=\"getForgetPassword();\" style=\"font-size:11px;\">忘记密码?</a>'
}
]
},{
layout :'column',
border : false,
width : '100%',
items : [ {
columnWidth : 0.5,
border : false,
layout : 'form',
items : [ loginBtn ]
}, {
columnWidth : 0.5,
border : false,
layout : 'form',
items : [ resetButton ]
}
]
}] }); // cookie中有值,设置记住密码选中状态
// 并赋值给用户名与密码
if ((uName != null && uName!='')
&& (uPwd!=null && uPwd!='')) {
remPwdCheckBox.checked = true;
isRememberPwd = true;
loginForm.form.findField('userName').setValue(uName);
loginForm.form.findField('password').setValue(uPwd);
} var loginFunc = function() {
if(loginForm.form.isValid()){
loginForm.getForm().submit( {
url : path + '/SysLogin/login.json?isRememberPwd='+isRememberPwd,
success : function(form, action) {
var result = action.result;
if (result.success) {
document.location=path+action.result.url;
} else {
Ext.Msg.alert(message.info,action.result.msg);
loginForm.getForm().reset();
}
}, failure : function(form, action) {
if (action.failureType == 'server') {
obj = Ext.util.JSON.decode(action.response.responseText);
Ext.Msg.alert( message.loginFailure, obj.msg);
} else {
Ext.Msg.alert( message.warning, message.loginError);//'认证服务器无法连接 '
}
loginForm.getForm().reset();
},
waitMsg : Label_Login.waitMsg //'正在登录,请稍候...'
});
}
}; // 展示到登陆页面body中的面板
var panel = new Ext.Panel( {
renderTo : 'loginpanel',
layout : "border",
width : 525,
height : 290,
defaults : {
border : false
},
items : [ {
region : "north",
height : 56,
html : '<img src="'+path+'/resources/common/images/head.gif"/>'
}, {
region : "south",
height : 56,
html : '<img src="'+path+'/resources/common/images/foot.gif"/>'
}, {
region : "west",
width : 253,
html : '<img src="'+path+'/resources/common/images/left.gif"/>'
}, loginForm]
}); Ext.get('loginpanel').setStyle('position', 'absolute').center(Ext.getBody());
loginForm.form.findField('userName').focus(true,false);
};
Ext.onReady(login);
function getForgetPassword(){
var userName = Ext.getCmp('login').form.findField("userName").getValue(); if(userName != null && userName != "" && userName != "请输入用户名" ){
Ext.Ajax.request({
url:path + '/SysLogin/getForgetPassword.json',
params:{userName:userName},
success:function(response){ var responseArray = Ext.util.JSON.decode(response.responseText);
Ext.Msg.alert('警示',"请你联系"+responseArray.Affiliation+"下的管理员找回密码!");
},
failure:function(){
Ext.Msg.alert('错误','服务器出现错误请稍后再试!');
}
});
}else{
Ext.Msg.alert('错误','请确认账户是否存在!');
} }

  • 效果图

  • 创建store

    var tab2store = new Ext.data.Store( {
    url : path + '/SysKhyz/getKHyzInstallList.json?id=' + id,
    reader : new Ext.data.JsonReader( {
    fields : [ 'ID', 'NAME', 'MODEL', 'TONS', 'NUM', 'PLACE',
    'LINE_STATUS' ],
    root : 'rows',
    totalProperty : 'total'
    })
    // autoLoad : true
    });
    tab2store.load( {
    params : {
    start : 0,
    limit : pagesize
    }
    });

  • 加载grid

      var tab2_grid = new Ext.grid.GridPanel( {
    id : 'KhyzInstall',
    // title :'站线信息',
    height : 500,
    trackMouseOver : true,
    region : "center",
    layout : 'fit',
    anchor : '100%',
    frame : false,
    stripeRows : true,
    loadMask : {
    msg : '正在加载数据,请稍后.....'
    },
    ds : tab2store,
    sm : new Ext.grid.CheckboxSelectionModel( {
    singleSelect : false
    }),
    viewConfig : {
    forceFit : true
    },
    columns : [ new Ext.grid.CheckboxSelectionModel(),
    new Ext.grid.RowNumberer(), {
    header : '设备名称',
    sortable : true,
    width : 220,
    dataIndex : 'NAME'
    }, {
    header : '设备型号',
    sortable : true,
    width : 220,
    dataIndex : 'MODEL'
    }, {
    header : '吨位(t)',
    width : 220,
    sortable : true,
    dataIndex : 'TONS'
    }, {
    header : '数量',
    width : 220,
    sortable : true,
    dataIndex : 'NUM'
    }, {
    header : '配置地点',
    width : 220,
    sortable : true,
    dataIndex : 'PLACE'
    }, {
    header : '状态',
    width : 220,
    sortable : true,
    dataIndex : '',
    renderer : function(v, p, r, i) {
    var s = r.get('LINE_STATUS');
    if (s == '0' || s == 0) {
    return '待提交';
    } else if (s == '1' || s == 1) {
    return '审批中';
    } else if (s == '2' || s == 2) {
    return '已通过';
    } else if (s == '3' || s == 3) {
    return '已驳回';
    } else {
    return '';
    } }
    } ],
    bbar : new Ext.PagingToolbar( {
    pageSize : pagesize,
    store : tab2store,
    displayInfo : true,
    displayMsg : '显示第{0}条到{1}条记录,一共{2}条',
    emptyMsg : '没有发现记录'
    })
    });

  • 按钮事件

    var addWin = new Ext.Window(
    {
    layout : 'fit',
    width : 1000,
    height : 400,
    plain : true,
    border : false,
    maximizable : true,
    title : '新增',
    items : [ add_formpanel ],
    modal : true,
    shadow : true,
    resizable : false,
    closeAction : 'hide',
    maximizable : true,
    buttons : [
    {
    id : 'SaveBtn5',
    text : '保存',
    iconCls : 'save',
    disabled : false,
    handler : function() {
    Ext.getCmp('SaveBtn5').setDisabled(true);
    if (add_formpanel.form.isValid()) { add_formpanel
    .getForm()
    .submit(
    {
    url : path
    + '/SysKhyz/savaKHyzInstall.json?TKHYZ_BASE_ID='
    + id
    + '&LINE_STATUS=0',
    method : 'POST',
    success : function(
    form, action) {
    Ext.MessageBox
    .alert(
    "提示信息",
    "信息保存成功!");
    tab2store
    .load( {
    params : {
    start : 0,
    limit : pagesize
    }
    });
    addWin.hide();
    Ext
    .getCmp(
    'SaveBtn5')
    .setDisabled(
    false);
    },
    failure : function(
    form, action) {
    Ext.MessageBox
    .alert(
    "提示信息",
    "服务器错误,请重试!");
    Ext
    .getCmp(
    'SaveBtn5')
    .setDisabled(
    false);
    }
    });
    } else {
    Ext.getCmp('SaveBtn5').setDisabled(false);
    } }
    },
    {
    text : '提报',
    iconCls : 'taskSend',
    handler : function() { if (add_formpanel.form.isValid()) { add_formpanel
    .getForm()
    .submit(
    {
    url : path
    + '/SysKhyz/savaKHyzInstall.json?TKHYZ_BASE_ID='
    + id
    + '&LINE_STATUS=1',
    method : 'POST',
    success : function(
    form, action) {
    if (action.result.flag) {
    Ext.MessageBox
    .alert(
    "提示信息",
    "信息提报成功!"); } else {
    Ext.MessageBox
    .alert(
    "提示信息",
    "提报流程出错,数据已保存!");
    } tab2store
    .load( {
    params : {
    start : 0,
    limit : pagesize
    }
    });
    addWin.hide();
    },
    failure : function(
    form, action) {
    Ext.MessageBox
    .alert(
    "提示信息",
    "服务器错误,请重试!");
    }
    });
    } } }, {
    text : '关闭',
    iconCls : 'clear',
    handler : function() {
    addWin.hide(); } } ]
    });



每天进步一点


  1. Label_Login.loginName系统字段,读者可以改成自己的文字

    listeners注册的监听,按下键盘回车就把屏幕焦点放到密码框

    blankText是右边错误提示信息

谈谈我对Ext的认识,元芳,你怎么看的更多相关文章

  1. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解

    Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...

  2. Ext.QuickTips.init();

    在Extjs的组件需要提示框时往往需要此语句. 首先,Ext.QuickTips是什么? 在Ext JS 4.2.0 的API中可以查到,注意在其他的Extjs版本以下查不到,这是因为在其他版本Ext ...

  3. Ext.Net学习笔记06:Ext.Net DirectEvents用方补充

    在ASP.NET控件上面使用DirectEvents 我们在ASP.NET中实现无刷新的页面请求的时候,通常会用到UpdatePanel,现在Ext.Net为我们提供了另外一种渠道:通过DirectE ...

  4. [Ext JS 4] 实战之Grid, Tree Gird编辑Cell

    前言 本篇这里以稍微复杂一点的Tree Grid 来介绍. 在写编辑grid 之, 先来看一下 grid 的 selType 的配置. 先给一个简单的Tree grid 的例子: Ext.onRead ...

  5. Ext JS 5初探(三)

    在上文提到了本地化文件的问题,然后在Ext JS 5的包里找了找,居然还没包含本地化包.我估计目前还不到考虑本地化的时候.在Sencha Touch中,是没有本地化包的,但是要让Ext JS也不包含本 ...

  6. 【翻译】在Ext JS应用程序中使用自定义图标

    原文:Using Custom Icons in Your Ext JS App 作者:Lee BoonstraLee is a technical trainer at Sencha. She's ...

  7. 安装和使用pyltp

    什么是pyltp: pyltp 是LTP的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能. 安装 pyltp 测试环境:系统win10 64位, pytho ...

  8. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  9. 解读sencha touch移动框架的核心架构(一)

    sencha的前身就是Extjs了,sencha 框架是世界上第一个基于HTML5的Mobile App框架 那么何谓框架,传统软件工程对于库和框架的区分主要着眼于对应用运行流程的控制权,框架提供架构 ...

随机推荐

  1. mysql 安装使用

    本节掌握内容: MySQL的介绍安装.启动 windows上制作服务 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 O ...

  2. django ORM中的RelatedManager(关联管理器)

    关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...

  3. SpringMVC——MVC

    一.了解MVC mvc这种设计模式,分为三个基本部分:模型(Model).视图(View)和控制器(Controller),不光运用于Web领域,而且也能用于非Web领域:可以特指一种表现层设计模式, ...

  4. spring的context:exclude-filter 与 context:include-filter

    1 在主容器中(applicationContext.xml),将Controller的注解打消掉 <context:component-scan base-package="com& ...

  5. 基于C#的机器学习--深层信念网络

    我们都听说过深度学习,但是有多少人知道深度信念网络是什么?让我们从本章开始回答这个问题.深度信念网络是一种非常先进的机器学习形式,其意义正在迅速演变.作为一名机器学习开发人员,对这个概念有一定的了解是 ...

  6. c++学习书籍推荐《C++ Templates》下载

    详细讲解C++模板语言的概念. 使用C++模板的常用设计技巧. 应用例证(其中一些是“高 级”应用). 百度云及其他网盘下载地址:点我 名人推荐 如果今年你只打算买一本C++的书,那就选<C++ ...

  7. 广告过滤器 Adguard Pre v6.4.1814 Lite V2 简约绿色版

    下载地址:点我 基本介绍 当你在浏览网页的时候总是弹出广告是不是非常的不爽,小编为伙伴们提供了Adguard Pre简约绿色版,一款专业的广告过滤器.Adguard Pre简约绿色版可以帮助伙伴们完美 ...

  8. SpringCloud解析之Zuul(一)

    本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. spring bo ...

  9. fastjson1.2.48以下版本存在重大漏洞

    1. 场景描述 今天接公司通知:阿里的Fastjson,今天爆出了一个反序列化远程代码漏洞,比较严重的一个漏洞. 影响范围: 1.2.48以下的版本(不包括1.2.48). 2. 解决方案 查看项目f ...

  10. 【Netty】使用解码器Decoder解决TCP粘包和拆包问题

    解码器Decoder和ChannelHandler的关系 netty的解码器通常是继承自ByteToMessageDecoder,而它又是继承自ChannelInboundHandlerAdapter ...