extjs 图片上传预览表单组件

项目中需要在表单中使用图片上传且预览组件,网上搜了下解决方案,实在是没什么可参考,于是自己动手写了个,效果如下:

使用如下:

{
					fieldLabel : "头像",
					xtype : "imagefield",
					value : "images/example/default_pic.png2",
					btnCfg : {
						text : "上传",
						scope : this,
						handler : function(a,d){
							alert(a.getValue())
							a.setValue("images/example/default_pic.png")
						}
					}
				}

 实现代码:

/**
 * 图片框 Ext.form.ImageField
 * @cfg btnCfg 配置形如 {
			text : "click",
			handler :function(imageFiled){
			
			},
			scope : this
		}} 
	@cfg	imgCfg : {
			cls : "",
			style : "margin: 0px 0px 1px; border: 1px solid rgb(204, 204, 204);  width: 100; height: 100px;"
		
*/	
Ext.form.ImageField = Ext.extend(Ext.form.DisplayField,{
	initComponent : function(){
		this.initContents();
		Ext.form.ImageField.superclass.initComponent.call(this);
	},
	//private
	initContents : function(){
		this.btnId = Ext.id();
		this.imgId = Ext.id()
		this.btnCfg  = Ext.applyIf(this.btnCfg||{},{
			text : "click",
			handler :Ext.emptyFn,
			scope : this
		})
		this.imgCfg  = Ext.applyIf(this.btnCfg||{},{
			cls : "",
			style : "margin: 0px 0px 1px; border: 1px solid rgb(204, 204, 204);  width: 100; height: 100px;"
		})
		this.html =  '<img  id="'+this.imgId+'" style="'+this.imgCfg.style+'" src="'+(this.value||Ext.BLANK_IMAGE_URL)+'" >' +
		'<br> <input  size="20" type="button" ' +'value="'+this.btnCfg.text+'"  id="'+this.btnId+'">';
	},
	//override
	afterRender : function(){
		Ext.form.ImageField.superclass.afterRender.call(this);
		this.addBtnClickEvent.defer(100,this);
	},
	//private
	addBtnClickEvent : function(){
		Ext.fly(this.btnId).on("click",this.btnCfg.handler.createDelegate(this.btnCfg.scope,[this]));
		
	},
	//override
	initValue : Ext.emptyFn,
	//override
 	getRawValue : function(){
	       var imgEl =  Ext.fly(this.imgId);
	       if(imgEl){
	    	   return imgEl.getAttribute("src");
	       }
        return "";
    },
    //override
    setRawValue : function(v){
        var imgEl =  Ext.fly(this.imgId);
	       if(imgEl){
	    	   imgEl.dom.setAttribute("src",v);
	       }
        return true;
    },
	destroy : function(){
        if(!this.isDestroyed){
        	Ext.fly(this.btnId).removeAllListeners () ;
        }
        Ext.form.ImageField.superclass.destroy.call(this);
    }
})
Ext.reg('imagefield', Ext.form.ImageField);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值