EXT 可选择图片列表的表单控件实现
先看一下表单效果:
点击图标,显示图标列表:
实现代码:
         var appform = new Ext.form.FormPanel({
 	        id: 'appform',
 	        cardStep:0,
 	        url:Adc.url.appAction,
 	        padding:'10px 20px',
 	        labelWidth: 80,
 	        baseCls: 'x-plain',
 	        method:'POST',
 	        defaults: {
 	            xtype: 'textfield'
 	        },
 	        items:[{
 	            fieldLabel: '编号',
 	            name : 'appId',
                 hidden:true,
 	            value : appId,
 	            anchor :'100%'
 	        },{
 	            fieldLabel: '名称',
 	            name : 'appName',
 	            allowBlank:false, //不允许为空
 	            blankText:'页面名称不能为空',
 	            emptyText:'请输入应用名称',
 	            maxLength:20,
 	            anchor :'100%'
 	        },
 	        {
 	            fieldLabel: '应用分类',
 	            name : 'catlogId',
 	            //hidden:true,
 	             readOnly : !me.editMode,
                // value :me.catalogId,
 	             xtype:'catalogselectfield',
                 //emptyText:'请选择',
                 //allowBlank:false, //不允许为空
 	            action:Adc.url.getCatlogTreeMethod,
 	            catId:Adc.constant.APP_CATLOG_ID,
 	            anchor :'100%'
 	        },
 	         {
                fieldLabel: '应用图标',
                name : 'appIcon',
                xtype:'appIconSelectField',
                imageFilePath:'resources/appDev/images/appIcon/',
                value:'resources/appDev/images/appIcon/defaultmenu_icon.png',
                anchor :'100%'
             }
 	         ,
 	        {
 	            xtype : 'textarea',
 	            fieldLabel: '描述',
 	            name : 'appDesc',
 	            allowBlank:true,
 	            emptyText:'请输入应用描述信息',
 	            maxLength:200,
 	            flex: 1,
 	            anchor :'100% 30%'
 	        },
 	        {
                 fieldLabel: '模板',
                 name : 'tplId',
                 allowBlank:false, //不允许为空
                 xtype:'templateselectfield',
                 anchor :'100%'
             },
 	        {
 	            fieldLabel: '状态',
 	            name : 'appStatus',
 	            hidden:true,
 	            value:'0',
 	            anchor :'100%'
 	        },{
 	            name : 'action',
 	            hidden:true,
 	            value:Adc.url.createAppMethod,
 	            anchor :'100%'
 	        },{
                 fieldLabel: '应用首页',
                 name : 'idxPageId',
                 value:me.pageId,
                 hidden:true,
                 anchor :'100%'
             }]
 	    });
AppIconSelectField.js
 Ext.ns('Adc.components');
 Adc.components.AppIconSelectField = Ext.extend(Ext.form.TextField,{
	    imageFilePath:'resources/appDev/images/appIcon/',
	    imageFilePreffix:'topmenu_icon',
	    imageFileSuffix:'.png',
	    maxImgCount:120,
	    constructor:function(config){
	        Ext.apply(this,config);
	        this.initImageData();
	        Adc.components.AppIconSelectField.superclass.constructor.call(this,config);
	    },
	    initImageData:function(){
	        var data ={};
	        data.images=[];
	        for(i=1;i<this.maxImgCount;i++){
	            //i=i<10?'0'+i:i;
	            var name = this.imageFilePreffix+i+this.imageFileSuffix;
	            var url = this.imageFilePath + name;
	            var o ={};
	            o.name = name;
	            o.url = url;
	            data.images.push(o);
	        };
	        this.imageData = data;
	    },
	    initComponent: function() {
	        Adc.components.AppIconSelectField.superclass.initComponent.call(this);
	        //添加事件
	        this.addEvents(
	            //当输入框被赋值时触发
	            'datachange'
	        );
	    },
	    onRender : function(ct, position) {
	        Adc.components.AppIconSelectField.superclass.onRender.call(this, ct, position);
	        //将输入表单隐藏
	        try{
	            this.el.dom.setAttribute('type','hidden');
	        }catch(e){
	            this.el.dom.style.display="none";
	        }
	        this.buidImageField();
	    },
	    buidImageField:function(){
	        this.wrap =  this.el.wrap({cls: 'x-form-field-wrap adc-form-field-img-wrap'});
	        var imgEl = this.wrap.createChild({
	            tag: 'img',
	            src: 'resources/appDev/images/appIcon/topmenu_icon01.png',
	            width:45,
                height:45
	        });
	        this.imgEl = imgEl;
	        var trigger = this.wrap.createChild({
	            tag: 'img',
	            src: Ext.BLANK_IMAGE_URL,
	            alt: "",
	            cls: "x-form-trigger adc-form-appIcon-trigger " + this.triggerClass
	        });
	        this.trigger = trigger;
	        this.initTrigger();
	        if(!this.width){
	            this.wrap.setWidth(this.imgEl.getWidth()+this.trigger.getWidth()+5);
	        }
	        this.resizeEl = this.positionEl = this.wrap;
	    },
	    initTrigger:function(){
	        this.mon(this.trigger, 'click', this.onTriggerClick, this, {preventDefault:true});
	    },
	    buildImageView:function(){
	        var me = this;
	        var imgEl = me.imgEl;
	        var data = me.imageData;
		    var store = new Ext.data.JsonStore({
		        data:data,
		        root: 'images',
		        fields: ['name', 'url']
		    });
		    var tpl = new Ext.XTemplate(
		    		'<tpl for=".">',
	                '<div id="{url}" class="x-plain app-icon-view-wrap">',
	                    '<div class="app-icon-body"><img src="{url}" style="width: 45px; height: 45px;" title="{name}"></div>',
	                '</div>',
	                '</tpl>',
	                '<div class="x-clear"></div>'
		    );
		    var imageView = new Ext.DataView({
	            store: store,
	            tpl: tpl,
	            autoHeight:true,
	            singleSelect: true,
	            trackOver:true,
	            overClass:'tpl-model-view-over',
	            itemSelector:'div.app-icon-view-wrap',
	            selectedClass :'tpl-model-view-selected',
	            emptyText: '没有可显示的图片'
	        });
	        var win = new Ext.Window({
	            width:850,
	            height:450,
	            modal: true,
	            title:'请选择',
	            layout:'fit',
	            items:imageView
	        });
	        imageView.on('click',function(view,index,node,e){
	            var rec = store.data.get(index);
	            var url = rec.data.url;
	            me.value = url;
	            me.el.dom.value = url;
	            imgEl.dom.setAttribute('src',url);
	            win.close();
	        });
	        win.show();
	        win.body.setStyle('background-color','#fff');
	    },
	    getValue:function(){
	        return this.value;
	    },
	    setValue : function(v){
	        this.value = v;
	        this.el.dom.value = v;
	        if(this.imgEl){
	            this.imgEl.dom.setAttribute('src',v);
	        }
	        return this;
	    },
	    onTriggerClick:function(trigger){
	        this.buildImageView();
	    }
	});
Ext.reg('appIconSelectField',Adc.components.AppIconSelectField);
EXT 可选择图片列表的表单控件实现的更多相关文章
- 认识HTML中表格、列表标签以及表单控件
		
前端之HTML,CSS(二) HTML标签 列表标签 无序列表:闭标签,由<ul><li></li>...</ul>组合而成,效果成纵向列表.格式:&l ...
 - HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)
		
一.列表 1.作用:默认显示方式为从上到下的显示数据 2.列表的组成 列表类型和列表项 3.列表的分类:有序列表 无序列表 自定义列表 无序列表语法为ul>li, 语法:ul代表列表,l ...
 - 415 DOM 查找列表框、下拉菜单控件、对表格元素/表单控件进行增删改操作、创建元素并且复制节点与删除、 对表格操作、通用性和标准的事件监听方法(点击后弹窗效果以及去掉效果)
		
DOM访问列表框.下拉菜单的常用属性: form.length.options.selectedindex.type 使用options[index]返回具体选项所对应的常用属性:defa ...
 - Bootstrap 表单控件一(单行输入框input,下拉选择框select ,文本域textarea)
		
单行输入框,常见的文本输入框,也就是input的type属性值为text.在Bootstrap中使用input时也必须添加type类型,如果没有指定type类型,将无法得到正确的样式,因为Bootst ...
 - 基于CkEditor实现.net在线开发之路(3)常用From表单控件介绍与说明
		
上一章已经简单介绍了CKEditor控件可以编写C#代码,然后可以通过ajax去调用,但是要在网页上面编写所有C#后台逻辑,肯定痛苦死了,不说实现复杂的逻辑,就算实现一个简单增删改查,都会让人头痛欲裂 ...
 - 基于 el-form 封装一个依赖 json 动态渲染的表单控件
		
nf-form 表单控件的功能 基于 el-form 封装了一个表单控件,包括表单的子控件. 既然要封装,那么就要完善一些,把能想到的功能都要实现出来,不想留遗憾. 毕竟UI库提供的功能都很强大了,不 ...
 - 了解HTML表单之13个表单控件
		
目录 传统控件 button select option optgroup textarea fieldset legend label 新增控件 datalist keygen output pro ...
 - HTML5(常用的表单控件)
		
常用的HTML5的表单控件: Input 类型: color color 类型用在input字段主要用于选取颜色,如下所示: 从拾色器中选择一个颜色: 选择你喜欢的颜色: <input type ...
 - 我教女朋友学编程Html系列(6)—Html常用表单控件
		
做过网页的人都知道,html表单控件十分重要.基本上我们注册会员.登录用户,都需要填写用户名.密码,那些框框都是表单控件. 本来今天就想写一些常用的html表单控件,于是开始搜资料,找到了一个网页,作 ...
 
随机推荐
- IntelliJ Idea和IntelliJ webstrm 常用快捷键
			
Ctrl+Shift + Enter,语句完成"!",否定完成,输入表达式时按 "!"键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shif ...
 - 用js控制css属性
			
在用js控制css属性时,行内css属性可以任意控制,但若是在<style></style>中写的css属性,均不能用alert读取,但是赋值却有几种现象, 第一种:无法读取, ...
 - deepin系统如何安装deb格式的软件
			
很简单,命令如下: sudo dpkg -i *.deb 记得路径要对
 - ASP.NET MVC制作404跳转(非302和200)
			
前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...
 - windows_keyboard shortcuts快捷键
			
单独按Windows:显示或隐藏"开始"功能表 Windows+BREAK:显示"系统属性" 对话框 Windows+D:显示桌面 Windows+M:最小化所 ...
 - poptest老李谈动态口令原理
			
poptest老李谈动态口令原理 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908 ...
 - 老李分享: 并行计算基础&编程模型与工具 2
			
2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...
 - Hibernate基础学习(一)—初识Hibernate
			
一.对象的持久化 狭义的理解: 持久化仅仅指把对象永久的保存到数据库中. 广义的理解: 持久化包括和数据库相关的各种操作. 保存: 把对象永久保存到数据库中. 更新: ...
 - Git安装与上传代码至Github
			
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6642887.html 这篇文章应该是全网最新,最全,最靠谱的Github安装到上传代码的流程. 1.Git ...
 - AngularJS进入使用前的准备工作
			
安装 AngularJS是以JavaScript文件形式发布的,可以通过 script 标签添加到网页中. 下载地址:https://github.com/angular/angular.js/rel ...