Home / PostsPost
ExtJs 集成kindEditor
嘟噜聪2015/01/31 10:49:17 4416人已阅
简介 我平时编辑文档时ExtJS带的editor编辑器往往有时无法满足我们的需求,所以我们需要一款更加强大的编辑器。KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。
我平时编辑文档时ExtJS带的editor编辑器往往有时无法满足我们的需求,所以我们需要一款更加强大的编辑器。
KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。
如上图这个,是不是很漂亮 ExtJS布局我就不在这里写了,代码太多了熟悉ExtJS的人应该很好弄,我用的是ExtJS5.1 GPL版本。
OK,首先我们得去kindEditor的官网下载插件包
似乎从2013年最后一版更新后就没有再更新了......
好了,下载好我解压后:
会得到以上这么多东西,其实很多都是我们不需要的,我们只要以下这些就行了:
对,就这么点...
把需要用的东西加载到index.html文件上去
<script type="text/javascript" src="{{path}}kindEditor/kindeditor-all-min.js"></script> <script type="text/javascript" src="{{path}}kindEditor/lang/zh_CN.js"></script>这样就完事了,需要的其他插件只要配置好后会动态加载,具体的去官网看文档吧,这里就不再描述了。
然后就到ExtJS了,这块代码会比较多,我们先把视图模块吧。
路径:#/app/view/life/LifeEditor.js
/** * 编辑文档的视图 */ Ext.define('LatteCake.view.life.LifeEditor', { extend : 'Ext.form.Panel', alias : 'widget.LifeEditor', /** 取个别名 */ xtype: 'LifeEditor', title: '编辑文章', /** 使用life-form控制器 */ controller: 'life-form', // viewModel: true, initComponent : function() { var me = this; Ext.apply(this, { frame: true, bodyPadding: 5, resizable: true, fieldDefaults: { labelWidth: 70, anchor: '100%' }, layout: { type: 'vbox', align: 'stretch' // Child items are stretched to full width }, defaultType: 'textfield', items: [ { allowBlank: false, fieldLabel: '文章标题', name: 'lifeTitle', emptyText: '请输入标题', invalidText: '标题最长64个字符.', maxLength: 32 },{ xtype: 'filefield', emptyText: '', fieldLabel: '文章图片', name: 'lifeImage', buttonText: '', buttonConfig: { iconCls: 'upload-icon' } },{ xtype: 'textarea', allowBlank: false, fieldLabel: '文章简介', name: 'lifeDesc', invalidText: '标题最长255个字符.', emptyText: '请输入文章简介', maxLength: 255 }, { xtype: 'textarea', region: 'center', name: 'content', id: 'content', height: 400, listeners: { 'render': function (f) { /** 延迟500毫秒显示,防止出现JS还没加载完就执行了 */ setTimeout(function () { if (KindEditor) { /** * 以下相当参数的设置可以去官网查文档 * 只要把所创建好的对象赋值给 kEditor参数就行了 一会咱们要从控制器调取这个对象 * 如果有其他需求用法与官网给的文档类似,不需要大家改动。 */ me.kEditor = KindEditor.create('#content-inputEl', { cssPath: '{{path}}kindEditor/plugins/code/prettify.css', /** CSS路径 */ uploadJson : baseInfo.baseUrl + '{{path}}uploadImage', imageUploadJson: baseInfo.baseUrl + '{{path}}uploadImage', imageSizeLimit: '3MB', /** 限制大小 */ resizeType: 0, resizeMode: 0, allowFileManager: true, height: 400 }); } }, 500); } } },{ fieldLabel: '来源', name: 'lifeSource', emptyText: '请输入文章来源地址', invalidText: '标题最长128个字符.', maxLength: 128 },{ fieldLabel: '关键字', name: 'lifeKeyword', emptyText: '请输入文章关键字', maxLength: 128 }, { xtype: 'tagfield', fieldLabel: '标签', // store: { // type: 'states' // }, name: 'lifeTag', reference: 'locations', displayField: 'state', valueField: 'abbr', createNewOnEnter: true, createNewOnBlur: true, filterPickList: true, queryMode: 'local', publishes: 'value' } ], buttons: [ { formBind: true, disabled: true, text: '保存', listeners: { click: 'submitNewLife' } }, { text: '清除', listeners: { click: 'clearLifeEdit' /** 触发的事件 */ } } ] }); this.callParent(arguments); } });这里用到了控制器我们把控制器也写一个加载进来 requires或在Applicaton.js里加载也行。
控制器路径:#/app/view/life/LifeController.js
/** * Life视图的控制器,用完自动消除 */ Ext.define('LatteCake.view.life.LifeController', { extend: 'Ext.app.ViewController', alias: 'controller.life-form', /** * 保存 */ submitNewLife: function() { var form = this.getView().getForm(), /** 获取那个视图 */ kEditor = this.getView().kEditor; /** 获取视图里的 kEditor 对象,刚刚Life视图里已经声明了 */ var subData = form.getValues(); /** 获取form框的所有参数 */ subData.lifeContent = kEditor.html(); if( form.isValid() ) { if( Ext.isEmpty( subData.lifeContent )) { Ext.Msg.alert('失败', '文章内容不能为空!'); return; } form.submit({ clientValidation: true, url: baseInfo.baseUrl + '{{path}}svaeLife', params: subData, waitMsg: '正在保存...', success: function(form, action) { var response = action.result; Ext.MsgTip.msg('提示', response.message); form.reset(); kEditor.html(''); }, failure: function(form, action) { Ext.Msg.alert('失败', action.result.message); } }); } }, /** * 清除内容 */ clearLifeEdit: function() { var form = this.getView().getForm(), kEditor = this.getView().kEditor; form.reset(); kEditor.html(''); } });这样就完成了,就这么简单,然后服务器就可以接受数据了。
保存成功后直接返回就行了
$response = [ 'success' => true, 'errorCode' => '', 'message' => '操作成功', 'data' => '' ]; return new JsonResponse($response);关于自动保存这个,我以后再写,先把一个整体完成,至少让它可以跑起来。
原创,需要转载,请注明出处,谢谢合作
很赞哦! (2)
文章评论
点击排行
本栏推荐
标签
站点信息
- 微信公众号