在Ext中集成KindEditor4.0正式版

适用Ext任何版本,我用的Ext2.0.2,因为是LGPL协议的

 

由于KindEditor于9.26推出了4.0正式版,我也将控件升级到了4.0版,原来使用的4.0beta版,正式版确实改了不少bug,至少改掉了,切换源代码编辑后,读取对象失效的问题

 

Ext中的HTML编辑器,功能虽然不错,但是离商业项目实用,还是有一定的距离,所有本人在一直都是将第三方编辑器,集成进入Ext,原来使用的FckEditor2.6,并且还增加了一系列实用功能,但是最近发现一个比较严重的问题,就是浏览器兼容性上存在问题,它问文件管理(上传、查看、删除)在:火狐、谷歌、IE9上均不能正常运行,想了很多办法,结果都不理想,本来准备实用它的最新版本,但是到官网上去看,居然要收费了,并且费用貌似很高,800多美元(当然,本人英语水平有限,如果有错误,欢迎指出),想想还是算了,最后我选择了,国产的KindEditor4.0版本,它的功能也强大, 关键是它的许可是 LGPL,废话不多说了,直接看看运行效果,后面有代码


在Ext中集成KindEditor4.0正式版_第1张图片

KindEditor功能并不比CKEditor弱多少,下面展示的一个个人认为比较拉风的功能

在这个控件中查询到你要的地址后,直接点击确定,就可以将图片截取下来,并放置在编辑框中


在Ext中集成KindEditor4.0正式版_第2张图片 在Ext中集成KindEditor4.0正式版_第3张图片

 

将它提供的lib、jsp文件放置到正确的位置,就可以使用它的文件管理、上传、文件删除功能

后面,我提供了一个完整的项目,使用JavaWeb打开即可,老做程序的应该都能知道如何将项目跑起来

实在不知道的可以给我留言,下面是一个大一点的图片,大家可以看得更清楚

上传路径,我修改了一下,使用这样的方式上传的,/attached/image/2011/09/22/xxx.jpg

大家觉得不好,完全可以到/editor/kindeditor4/jsp/upload_json.jsp中进行修改


在Ext中集成KindEditor4.0正式版_第4张图片
 
 文件删除功能,是我新加上去的,源码就在jsp下的file_delete.jsp,当然,如果大家觉得我写得不好,完全自己修改,不过要,遵从LGPL协议,开源即可


在Ext中集成KindEditor4.0正式版_第5张图片
 
 将KindEditor集成进Ext的代码在这里,我这要说以下

在5~10行,使用了jquery方法,我是为了图方面,目的是读取父类对象,然后清除内容,将KindEditor那段字符串,添加进去,你完全可以更换成其他的代码,页面就可以导入jquery.js了

还有一点,我要说一下,我的setValue操作,是启用一个表单,将信息通过post方式传递到iframe中的KindEditor,避免了异步而引起的一系列问题,实践证明,很好用哈

 

Ext.form.KindEditorPanel = Ext.extend(Ext.form.TextArea, {
	    onRender : function(ct, position){   
			Ext.form.TextArea.superclass.onRender.call(this, ct, position);
			this.fieldId = this.fieldName+'KindEditor';
			var parentEle = $(this.el.dom).parent();
			this.height = isNaN(this.fieldHeight) ? 200 : this.fieldHeight;
			parentEle.empty()
			var random = Math.random();
			parentEle.append("<iframe id="+this.fieldId+
			" name="+this.fieldId+
			" height="+this.height+
			" width=97% src=editor/kindeditor4/editor.jsp?ran="+random+
			" frameborder=0 scrolling=no marginwidth=0 marginheight=0></iframe>"+
			" <form action='editor/kindeditor4/editor.jsp?ran="+random+
			"' id="+this.fieldId+"Form method=post target="+this.fieldId+
			" style='display: none;'>"+
			"	<textarea name='editorValue'></textarea>"+
			"	<input type='submit'/>"+
			" </form>");
		},
	    getValue : function(){
	    	//这里可能存在延迟,所以,如果如果没有数据,不管即可,反正在读取的时候,肯定有值
	    	var func = window.frames[this.fieldId].getValueForEditor;
	    	if(func){
	    		return window.frames[this.fieldId].getValueForEditor();
	    	}else{
	    		return "";
	    	}
	    }, 
	    setValue : function(v){
	      	//直接通过请求方式传递,首先读取父页面的editorForm对象
	      	var editorForm = document.getElementById(this.fieldId+"Form");
	      	editorForm.editorValue.value = v;
	      	editorForm.submit();
	    }
	});   
	Ext.reg('kindeditor',Ext.form.KindEditorPanel);  

 

 

最后是工程源码,没有其他业务,就一张html页面,一个使用示例

 

你可能感兴趣的:(kindeditor)