`
siyuan
  • 浏览: 7433 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ext下的FCKeditor扩展完善

阅读更多
由于项目需要用到Extjs+FCKeditor,在Extjs官方坛论上找到了FCKeditor的扩展http://extjs.com/forum/showthread.php?t=17423,在使用过程中到了不少的问题,主要是同一个页面加载多个FCK instance及设置SetValue的问题。以下是修改过后的代码:
Ext.namespace('Ext.ux.form');

/**
 * FCKeditor 初始配置信息
 * 
 * @type {Object}
 */
var oFCKeditorOptions = {
	BasePath : 'js/fckeditor/',
	Config : {
		BaseHref : window.location,
		SkinPath : '../editor/skins/office2003/',
		ProcessHTMLEntities : true,
		ProcessNumericEntities : false,
		ToolbarStartExpanded : true,
		LinkBrowser : true,
		ImageBrowser : true,
		FlashBrowser : true,
		LinkUpload : true,
		ImageUpload : true,
		FlashUpload : true
	},
	ToolbarSet : 'Symbol'
};

/**
 * Ext FCKeditor
 * 
 * @param {Object}
 *            config 配置信息
 */
Ext.ux.form.FCKeditor = function(config) {
	this.config = config;
	Ext.ux.form.FCKeditor.superclass.constructor.call(this, config);
	/**
	 * 通知FCKeditor是否实例化 
	 * notice the component's FCKeditor instance inited
	 * @type Boolean
	 */
	this.instanceLoaded = false;
	/**
	 * 实例值
	 * the component's FCKeditor instance value
	 * @type String
	 */
	this.instanceValue = '';
	/**
	 * 组件的FCKeditor实例
	 * @type {FCKeditor}
	 */
	this.editorInstance = undefined;
};
/**
 * Ext FCKeditor
 * 
 * @class Ext.ux.form.FCKeditor
 * @extends Ext.form.TextArea
 */
Ext.extend(Ext.ux.form.FCKeditor, Ext.form.TextArea, {
			/**
			 * 初始化事件
			 */
			initEvents : function() {
				this.on('destroy', function() {
							if (typeof this.editorInstance != 'undefined') {
								delete this.editorInstance;
							}
						});
			},
			onRender : function(ct, position) {
				if (!this.el) {
					this.defaultAutoCreate = {
						tag : "textarea",
						style : "width:100px;height:60px;",
						autocomplete : "off"
					};
				}
				Ext.form.TextArea.superclass.onRender.call(this, ct, position);
				this.hideMode = "visibility";
				this.hidden = true;
				if (this.grow) {
					this.textSizeEl = Ext.DomHelper.append(document.body, {
								tag : "pre",
								cls : "x-form-grow-sizer"
							});
					if (this.preventScrollbars) {
						this.el.setStyle("overflow", "hidden");
					}
					this.el.setHeight(this.growMin);
				}
				setTimeout("loadFCKeditor('" + this.id + "'," + this.config.height + ");", 100); // Change
			},
			/**
			 * 设置是否已经加载过此控件
			 * set FCKeditor instance is inited
			 * @param {Boolean} v
			 */
			setIsLoaded : function(v) {
				this.instanceLoaded = v;
			},
			/**
			 * 获取是否已实例化过此控件
			 * get FCKeditor instance is inited
			 * @return {Boolean}
			 */
			getIsLoaded : function() {
				return this.instanceLoaded;
			},
			/**
			 * 
			 * @param {String} value
			 */
			setValue : function(value) {
				this.instanceValue = value;
				if (this.instanceLoaded) {
					this.FCKeditorSetValue(value); // Change this.name
				}
				Ext.form.TextArea.superclass.setValue.apply(this, [value]);
			},
			/**
			 * 
			 * @return {String}
			 */
			getValue : function() {
				if (this.instanceLoaded) {
					value = this.FCKeditorGetValue(); // Change this.name to this.id
					Ext.form.TextArea.superclass.setValue.apply(this, [value]);
					return Ext.form.TextArea.superclass.getValue.call(this); // Change getValue(this) to
				} else {
					return this.instanceValue;
				}
			},
			/**
			 * 
			 * @return {String}
			 */
			getRawValue : function() {
				if (this.instanceLoaded) {
					value = this.FCKeditorGetValue(); // Change this.name to this.id
					Ext.form.TextArea.superclass.setRawValue.apply(this, [value]);
					return Ext.form.TextArea.superclass.getRawValue.call(this); // Change getValue(this) to
				} else {
					return this.instanceValue;
				}
			},
			/**
			 * 设置FCKeditor实例的值
			 * @param {String} value
			 */
			FCKeditorSetValue : function(value) {
				if(this.instanceLoaded == false){
					return;
				}
				// fix IE No Permission Denied errors
				var runner = new Ext.util.TaskRunner();
				var task = {
					run : function() {
						try {
							var editor = this.editorInstance; // update var editor
							if (editor.EditorDocument.body) {
								editor.SetData(value);
								runner.stop(task);
							}
						} catch (ex) {
							//Ext.logf('调试信息(info):{0}', ex);
						}
					},
					interval : 100,
					scope : this
				};
				runner.start(task); // end fix
			},
			/**
			 * 获取FCKeditor实例的值
			 * @return {String}
			 */
			FCKeditorGetValue : function() {
				var data = '';
				if(this.instanceLoaded == false){
					return data;
				}
				data = this.editorInstance.GetData();				
				return data;
			}
		});
Ext.reg('fckeditor', Ext.ux.form.FCKeditor);

/**
 * 实例化FCKeditor
 * 
 * @param {String}
 *            element el id
 * @param {Number}
 *            height
 */
function loadFCKeditor(element, height) {
	var oFCKeditor = new FCKeditor(element);
	oFCKeditor.BasePath = oFCKeditorOptions.BasePath;
	oFCKeditor.ToolbarSet = oFCKeditorOptions.ToolbarSet;
	oFCKeditor.Config = oFCKeditorOptions.Config;
	oFCKeditor.Height = height;
	oFCKeditor.ReplaceTextarea();
}
/**
 * FCKeditor API: 当FCKeditor实例化完成时执行
 * 
 * @param {FCKeditor} editorInstance
 */
function FCKeditor_OnComplete(editorInstance) {
	/**
	 * @type {Ext.ux.form.FCKeditor}
	 */
	var activeEditor = Ext.getCmp(editorInstance.Name);
	activeEditor.editorInstance = editorInstance;
	activeEditor.instanceLoaded = true;
	activeEditor.FCKeditorSetValue(activeEditor.instanceValue);
	editorInstance.Events.AttachEvent('OnBlur', FCKeditor_OnBlur);
	editorInstance.Events.AttachEvent('OnFocus', FCKeditor_OnFocus);
}

function FCKeditor_OnBlur(editorInstance) {
	editorInstance.ToolbarSet.Collapse();
}

function FCKeditor_OnFocus(editorInstance) {
	editorInstance.ToolbarSet.Expand();
}

示例:
<html>
 <head>
  <title> New Document </title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css">
    <script type="text/javascript" src="../ext/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="../ext/ext-all-debug.js"></script>
    <script type="text/javascript" src="../lib/fckeditor/fckeditor.js"></script>
    <script type="text/javascript" src="Ext.ux.form.FCKeditor.js"></script>
 </head>

 <body>
  <script language="JavaScript">
  <!--
	Ext.onReady(function() {
		var win_cxpz = new Ext.Window({
			layout : 'fit',
			width : 800,
			title :'FCKeditor 示例',
			height : 400,
			closeAction :'hide',
			plain : true,
			item :[{
				xtype : 'fckeditor'
			}],
			buttonAlign :'center',
			buttons: [{
				text : '返回',
				handler : function(){
					win_cxpz.hide();
				}
			}]
		});
		win_cxpz.show();      

	});	
  //-->
  </script>
 </body>
</html>
分享到:
评论
5 楼 javaAlpha 2009-11-09  
FCKeditor 这个东西没大研究过,看多很多人用。 最近在学习使用ext。
4 楼 fengbingji 2009-05-27  
在fckconfig.js里面设置
FCKConfig.ToolbarSets["Ext"]
似乎没效
3 楼 songyinghao 2009-04-06  
不知道怎么回事,我调试时出现了问题
2 楼 nanasy 2009-02-18  
用了 可是在某些浏览器下不会出现滚动条 不知道怎么解决
1 楼 Oscar558 2008-12-22  
楼主能不能打包一下,再给个例子看啊?

相关推荐

    ext-fckeditor整合

    总的来说,EXT与FCKeditor的整合是前端开发中提升用户体验的一种常见手段,它结合了EXT的强大UI组件和FCKeditor的文本编辑功能,使得开发者能够构建出功能更加完善的Web应用。对于那些需要在网页上提供复杂文本编辑...

    在EXT中使用FCKEditor编辑器例子

    EXT是一个流行的JavaScript库,主要用于构建富客户端应用程序,它提供了丰富的组件和可扩展的架构。FCKEditor是一款开源的在线文本编辑器,常被用于网页或Web应用中,提供类似于桌面文字处理软件的编辑体验。这篇...

    FCKEditor与ext结合使用

    这篇文档将深入探讨如何将FCKEditor与EXT结合,以解决EXT编辑器的局限性,提升Web应用的用户体验。 **1. FCKEditor简介** FCKeditor(现称为CKEditor)是一款开源的JavaScript富文本编辑器,它提供了丰富的文本格式...

    ext-fckeditor

    标题中的"ext-fckeditor"指的是基于Java开发的一个项目,它集成了Ext库和FCKeditor。这个项目的主要目的是为开发者提供一个完整的、可运行的源代码解决方案,以便于在Java环境中集成富文本编辑器功能。 Ext是一个...

    fckeditor 与ext 集成使用

    FCKeditor以其易用性和灵活性而受到开发者欢迎,可以通过简单的API进行定制和扩展。 **EXT简介** EXT是一个用于构建高性能Web应用程序的JavaScript库,提供了丰富的组件和布局管理,能够创建出复杂的、响应式的用户...

    给FCKeditor扩展插入FLV视频功能

    本文将深入讲解如何为FCKeditor扩展插入FLV视频功能,以及涉及到的相关技术知识点。 首先,FLV是一种流行的Flash视频格式,常用于在线流媒体播放。为了在FCKeditor中实现FLV视频的插入,我们需要对FCKeditor的源码...

    FCKeditor.Net_2.6.3.zip和FCKeditor-v2.6.3

    4. **自定义扩展**:开发者可以通过API和插件系统对FCKeditor进行扩展,添加自定义功能或修改原有功能,以满足特定需求。 5. **多语言支持**:内置多种语言包,方便不同地区的用户使用。 6. **源代码视图**:用户...

    FCKeditor && fckeditor.properties

    这个文件通常位于FCKeditor的根目录下,使用纯文本格式,便于开发者进行编辑和调试。`fckeditor.properties`中的配置项涵盖了语言设定、路径配置、安全选项、编辑器样式等多个方面,通过修改这些配置,可以定制...

    FCKeditor_2.6.8.zip

    - **配置编辑器**:根据需求修改fckeditor/editor/filemanager/connectors下的配置文件,设置上传路径、权限等。 - **初始化编辑器**:在HTML页面中创建一个`&lt;textarea&gt;`标签,然后使用FCKeditor的JavaScript API来...

    ASP.NET下FCKeditor配置方法全解

    ASP.NET下的FCKeditor是一款强大的在线文本编辑器,它为Web开发者提供了一个便捷的方式来创建富文本内容,如网页、文章等。FCKeditor以其丰富的功能和易于集成的特点,深受开发者的喜爱。这篇博客将全面解析如何在...

    最新FCKeditor_2.6 版本 FCKeditor编辑器和控件

    解压FCKeditor编辑器,得到文件夹fckeditor,复制此文件夹到Web应用的项目下(也可以是子孙目录下)。 解压FCKeditor控件,在其子目录bin/Release/2.0下有一个程序集。在Web应用的项目中引用该程序集。 2. 在页面...

    EXT中FCK的使用

    EXT是一个强大的JavaScript库,用于构建富客户端Web应用程序。它提供了丰富的组件、布局管理和数据绑定功能。FCKeditor(现称为CKEditor)则是一款知名的在线...这不仅提升了用户体验,也使得EXT应用的功能更加完善。

    fckeditor源文件和demo

    - **插件扩展**:FCKeditor拥有丰富的插件系统,可以扩展其功能,例如添加视频插入、代码高亮等。 - **文件管理**:FCKeditor通常与文件上传和管理功能结合使用,需要设置一个文件服务器来存储和访问用户上传的文件...

    一个在jsp下可用的fckeditor组件

    要在MyEclipse中使用FCKeditor,首先需要下载FCKeditor的压缩包,然后将其解压到项目的WebContent目录下。接下来,在JSP文件中引入FCKeditor的JavaScript库,并配置相应的路径。在MyEclipse中,可以直接运行项目,...

    FCKeditor开发jar包及fckeditor文件夹

    这个压缩包“FCKeditor开发jar包及fckeditor文件夹”包含的是FCKeditor的开发相关资源,主要分为两部分:jar包和fckeditor文件夹。 1. **FCKeditor jar包**: 这个jar包通常包含了FCKeditor的Java版本,是将...

    Fck文本编辑器 FCKeditor fckeditor

    FCKeditor还允许开发者通过编写插件来扩展其功能,如增加特殊格式的支持、集成其他服务等。这极大地提高了编辑器的灵活性和适应性。 **安全性** 为了保障网站的安全,FCKeditor内置了一些安全机制,例如防止XSS...

    fckeditor

    3. **插件扩展**:通过其开放的API,开发者可以自定义或扩展编辑器功能,增加如代码高亮、地图集成等个性化插件,增强了编辑器的可定制性。 4. **WYSIWYG(所见即所得)**:FCKeditor采用的是WYSIWYG编辑模式,用户...

    FCKeditor_2.6.3+FCKeditor-2.3.rar

    6. **插件扩展**:FCKeditor拥有一个活跃的开发者社区,提供了大量插件,可扩展编辑器的功能,如代码高亮、公式编辑等。 7. **API接口**:FCKeditor提供了详细的API文档,允许开发者自定义编辑器的行为和外观,以...

    FckEditor在线编辑器

    7. **跨平台兼容**:FckEditor支持各种浏览器,包括Internet Explorer、Firefox、Chrome、Safari和Opera,确保在不同环境下都能稳定运行。 8. **API接口**:提供JavaScript API,开发者可以与服务器端进行交互,...

    手动 扩展Fckeditor 上传文件 功能

    手动 扩展Fckeditor 上传文件 功能

Global site tag (gtag.js) - Google Analytics