- 浏览: 399158 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- java (39)
- linux (9)
- hibernate (2)
- Spring (10)
- Struts2 (1)
- Ext (38)
- Ext + Java (5)
- Oracle (5)
- JavaScript (15)
- 开发工具 (3)
- ajax (2)
- WebSerivice+Spring (2)
- WebService+CXF (2)
- 服务器 (4)
- MQ (1)
- Apache (3)
- axis (3)
- myeclipse,maven (2)
- WebService (4)
- web (11)
- httpinvoke (1)
- 多线程 (3)
- 同步 (1)
- Servlet (2)
- css (2)
- div (2)
- html (1)
- file (2)
- 应用软件 (1)
- myEclipse10 (1)
- mysql (2)
- Extjs4 (2)
- JavaScript css (1)
- mongodb (2)
- socket (6)
- 流媒体 (5)
- 语音技术 (5)
- freeswitch (1)
最新评论
-
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina 学习 -
stduPanda:
引用引用[自行车在现场咨询quote]引用引用引用引用引用引用 ...
Errors running builder 'DeploymentBuilder' on project '工程名' -
鱼翔空:
maven3 导入报Plugin execution not ...
CXF自动生成wsdl与xsd文件 -
哈哈哥_Supper:
closeAction:'hide',
Extjs4 tabPanel关闭后打开 cannot read property addcls of null -
哈哈哥_Supper:
var tab1 = tabPanel.add(
...
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
转载地址:http://floydd.iteye.com/blog/1326338
1.editor的iframe window的keydown事件绑定
由于htmleditor本身提供的specialkey event不给力,所以自己手动在init时增加更加精确的keydown事件来弥补
需要注意的是:chrome的事件必须绑定在body上,否则ENTER这种特殊的键无法触发
Javascript代码
- var win = Ext.isIE ? ed.getDoc() : ed.getWin();
- ...
- Ext.EventManager.on(!Ext.isWebKit ? win : win.document.body,
- 'keydown', function(e) {
- if (e.isSpecialKey())
- this.fireEvent('_specialkey', this, e)
- }, ed);
2.chrome下htmleditor回车会有问题(光标位置不正确),发现源代码中extjs官网是加了2个br,结果是不对的,修正方法是在fixKeys方法中修改webkit部分,回车时插入\n(chrome会自动变成\n<br>),getvalue时干掉所有\n<br>,比较纠结的方法,但是能解决问题,代码 如下
Javascript代码
- fixKeys : function() {
- if (Ext.isIE) {
- ...
- } else if (Ext.isOpera) {
- ...
- } else if (Ext.isWebKit) {
- return function(e) {
- var k = e.getKey();
- if (k == e.TAB) {
- e.stopEvent();
- this.execCmd('InsertText', '\t');
- this.deferFocus();
- } else if (k == e.ENTER) {
- e.stopEvent();
- // fix chrome ENTER double pressed bug
- <strong>this.execCmd('InsertText', '\n');
- </strong> this.deferFocus();
- }
- };
- }
- }(),
- getValue : function() {
- var ret = FloatHtmlEditor.superclass.getValue.apply(this, arguments);
- if (ret) {
- // fix edit grid panel compare startvalue & nowvalue
- // fix '\n' patch for webkit(chrome) when ENTER pressed
- ret = ret.replace(/^( |<br>|\s)*|( |<br>|\s)*$/ig, '')
- ret = ret.replace(/<div>(.+?)<\/div>/ig,'<br>$1')
- }
- if (!ret) {
- ret = '';
- }
- return ret;
- },
FloatHtmlEditor 是一个用于嵌入在grid中的editor,主要是修改了edit的bar,能够浮动出来,节约grid中的编辑区域
其他扩展特性:
* copy/paste 简化所有copy内容为纯文本,包括word/excel等复杂的格式
* 能够自适应文字大小,自动扩展编辑区域
* 修正多个平台下的focus的问题(htmleditor默认的focus和其他field有区别,不能定位的文字末尾)
完整源码:
Javascript代码
- var FloatHtmlEditor = Ext.extend(Ext.form.HtmlEditor, {
- fixKeys : function() {
- if (Ext.isIE) {
- return function(e) {
- var k = e.getKey(), doc = this.getDoc(), r;
- if (k == e.TAB) {
- e.stopEvent();
- r = doc.selection.createRange();
- if (r) {
- r.collapse(true);
- r.pasteHTML('');
- this.deferFocus();
- }
- } else if (k == e.ENTER) {
- r = doc.selection.createRange();
- if (r) {
- var target = r.parentElement();
- if (!target || target.tagName.toLowerCase() != 'li') {
- e.stopEvent();
- r.pasteHTML('<br />');
- r.collapse(false);
- r.select();
- }
- }
- }
- };
- } else if (Ext.isOpera) {
- return function(e) {
- var k = e.getKey();
- if (k == e.TAB) {
- e.stopEvent();
- this.win.focus();
- this.execCmd('InsertHTML', '');
- this.deferFocus();
- }
- };
- } else if (Ext.isWebKit) {
- return function(e) {
- var k = e.getKey();
- if (k == e.TAB) {
- e.stopEvent();
- this.execCmd('InsertText', '\t');
- this.deferFocus();
- } else if (k == e.ENTER) {
- e.stopEvent();
- // fix chrome ENTER double pressed bug
- this.execCmd('InsertHTML', '\n<br>');
- this.deferFocus();
- }
- };
- }
- }(),
- _measureDiv : null,
- _getFrame : function() {
- if (!this._frm)
- this._frm = this.getEl().parent().query('iframe')[0];
- return this._frm
- },
- _adjustHeight : function() {
- var t = Ext.fly(this._getFrame());
- var div = this._measureDiv
- if (!div) {
- div = this._measureDiv = this.__measureDiv = document
- .createElement('div');
- div.style.position = 'absolute';
- // div.style.border = '1px solid red'
- div.style.top = '-1px';
- div.style.left = '-10000px'
- div.style.whiteSpace = 'normal';
- div.style.wordWrap = 'break-word';
- div.style.lineHeight = '15px'
- document.body.appendChild(div)
- }
- if (t.dom.contentWindow.document.body.innerHTML == '') {
- t.setHeight(this._min_h);
- return
- }
- if (div.innerHTML == t.dom.contentWindow.document.body.innerHTML)
- return;
- var width = parseInt(t.getWidth());
- Ext.isIE ? width -= 25 : width -= 7
- div.style.width = width + 'px'
- div.innerHTML = t.dom.contentWindow.document.body.innerHTML;
- this._adjust_h = div.offsetHeight
- if (this._adjust_h < this._min_h) {
- this._adjust_h = this._min_h;
- }
- t.setHeight(this._adjust_h);
- },
- onEditorEvent : function(e) {
- if (this.onSpecialKey) {
- this.onSpecialKey(e);
- }
- return FloatHtmlEditor.superclass.onEditorEvent.apply(this, arguments)
- },
- getValue : function() {
- var ret = FloatHtmlEditor.superclass.getValue.apply(this, arguments);
- if (ret) {
- // fix edit grid panel compare startvalue & nowvalue
- // fix '\n' patch for webkit(chrome) when ENTER pressed
- ret = ret.replace(/^(|<br>|\s)*|(|<br>|\s)*$/ig, '')
- ret = ret.replace(/<div>(.+?)<\/div>/ig,'<br>$1')
- }
- if (!ret) {
- ret = '';
- }
- return ret;
- },
- markTeamMember : function() {
- this.teamCmp = true
- },
- initComponent : function() {
- this.valueEditToolbarId = Ext.id()
- this.onBlur = Ext.form.Field.prototype.onBlur;
- FloatHtmlEditor.superclass.initComponent.call(this);
- this.addEvents('_specialkey')
- this.on('afterrender', function() {
- this.getToolbar().hide();
- }, this)
- this.on('show', function() {
- this._adjust_h = 0;
- this._adjustHeight.defer(100, this);
- this.focus()
- }, this)
- this.on('initialize', function(ed) {
- var toolbarWin = this.toolbarWin = new Ext.Window({
- html : '<div id="' + this.valueEditToolbarId
- + '" class=""></div>',
- height : 255,
- width : 50,
- closeAction : 'hide',
- resizable : false,
- iconCls : 'icon-toolbox'
- })
- toolbarWin.show();
- var xy = this.getHoverTarget().getEl().getXY();
- toolbarWin.setPagePosition(xy[0] + this.getHoverTarget().getWidth()
- - toolbarWin.getWidth(), xy[1]);
- var el = this.getToolbar().getEl();
- var appentToEl = Ext.getDom(this.valueEditToolbarId);
- appentToEl.className = el.dom.parentNode.className;
- el.appendTo(appentToEl);
- this.getToolbar().show();
- var tbarRawRow = el.query('.x-toolbar-left-row')[0];
- var btnNodes = Ext.Element.fly(tbarRawRow).query('.x-toolbar-cell');
- Ext.each(btnNodes, function(btnNode) {
- var btnEl = Ext.Element.fly(btnNode);
- if (btnEl.query('.xtb-sep').length) {
- btnEl.remove();
- } else {
- var newRow = Ext.Element.fly(tbarRawRow)
- .insertSibling({
- tag : 'tr',
- cls : 'x-toolbar-left-row'
- });
- newRow.appendChild(btnNode);
- var nel = Ext.Element.fly(btnNode);
- nel.query('button')[0].setAttribute('unselectable',
- 'on')
- nel.on('click', function() {
- this.fireEvent('styleBtnClick')
- }, this)
- }
- }, this)
- toolbarWin.hide();
- if (!Ext.isIE) {
- toolbarWin.on('move', function() {
- ed.markTeamMember()
- })
- }
- this.getEl().findParent("div", 2, true).query('.x-html-editor-tb')[0].style.display = 'none'
- Ext.EventManager.on(ed.getWin(), 'blur', function() {
- if (this.adjustTimer) {
- clearInterval(this.adjustTimer);
- delete this.adjustTimer
- }
- if (this._measureDiv) {
- this._measureDiv.innerHTML = ''
- }
- this._adjust_h = 0;
- (function () {
- var teamCmp = ed.teamCmp;
- teamCmp ? delete ed.teamCmp : ed.onBlur.apply(ed,
- arguments)
- }).defer(10, ed, arguments);
- }, ed);
- ed.getWin().document.body.style.overflow = 'hidden'
- ed.getWin().document.body.style.whiteSpace = 'normal';
- ed.getWin().document.body.style.wordWrap = 'break-word';
- ed.getWin().document.body.style.lineHeight = '15px';
- Ext.EventManager.on(ed.getWin(), 'focus', function() {
- if (this.teamCmp)
- delete this.teamCmp
- }.dg(this), ed);
- var win = Ext.isIE ? ed.getDoc() : ed.getWin()
- Ext.EventManager.on(Ext.isIE ? ed.getDoc().documentElement : ed
- .getWin(), 'paste', function(e) {
- var html = ed.getDoc().body.innerHTML;
- if (html.length >= 4
- && html.substring(html.length - 4) == '<br>') {
- ed._beforePasteHTMLPos = html.length - 4;
- } else {
- ed._beforePasteHTMLPos = html.length
- }
- })
- // fix chrome keydown problem
- Ext.EventManager.on(!Ext.isWebKit ? win : win.document.body,
- 'keydown', function(e) {
- if (!this.adjustTimer) {
- this.adjustTimer = setInterval(function() {
- this._adjustHeight();
- }.dg(this), 200);
- }
- if (e.isSpecialKey())
- this.fireEvent('_specialkey', this, e)
- }, ed);
- // fix IE first range select
- this.moveCursorToEnd()
- }, this)
- },
- // public >>>
- getHoverTarget : Ext.emptyFn,
- toolbarWin : null,
- valueEditToolbarId : null,
- // public <<<
- _adjust_h : 0,
- _min_h : 34,
- setSize : function(w, h) {
- if (typeof w == 'object') {
- h = w.height
- w = w.width
- }
- if (this._adjust_h == 0)
- this._min_h = h - 4;
- FloatHtmlEditor.superclass.setSize.apply(this, arguments);
- var t = Ext.Element.fly(this.getEl().parent().query('iframe')[0]);
- t.setHeight(this._adjust_h ? this._adjust_h : this._min_h);
- },
- focus : function(st, delay) {
- var t = this.getWin();
- if (this._focus_delay)
- clearTimeout(this._focus_delay)
- this._focus_delay = window.setTimeout(function() {
- t.focus();
- }, 10);
- },
- moveCursorToEnd : function() {
- this.focusPatch()
- },
- focusPatch : function() {
- var ed = this;
- if (!ed.win)
- return
- var doc = ed.getDoc();
- ed.win.focus();
- if (Ext.isIE) {
- var r = doc.selection.createRange();
- if (r) {
- r.moveStart('character', 1000);
- r.collapse(true);
- r.select();
- }
- } else {
- var contentDoc = doc;
- var range = contentDoc.createRange();
- var lastNode = contentDoc.body.childNodes[contentDoc.body.childNodes.length
- - 1];
- var end = 0;
- var selection = ed.getWin().getSelection();
- range.setStart(contentDoc.body.firstChild, 0);
- if (lastNode.nodeType == 3) {
- end = lastNode.textContent.length;
- range.setEnd(lastNode, end);
- } else {
- range.setEndAfter(lastNode)
- }
- selection.removeAllRanges();
- // chorme need the range collapsed before add to selection
- range.collapse(false);
- selection.addRange(range);
- }
- },
- showTBWin : function() {
- var tbwin = this.toolbarWin
- if (tbwin) {
- var a = tbwin.toFront
- tbwin.toFront = function() {
- }
- tbwin.show()
- tbwin.toFront = a
- }
- },
- // clean all tags
- syncValue : function() {
- if (this.initialized) {
- var bd = this.getEditorBody();
- var len = bd.innerHTML.length;
- FloatHtmlEditor.superclass.syncValue.call(this);
- if (this._beforePasteHTMLPos != null) {
- this.syncValue1();
- var pastehtml = bd.innerHTML
- // .substring(this._beforePasteHTMLPos);
- // replace all tags,only plain text from clipboard
- var adjustpastehtml = pastehtml
- // trim spaces between tags
- // replace \n for excel paste
- .replace(/\s+/ig, '')
- // replace tag except for <br>
- .replace(/<(?!br).*?>/ig, '')
- if (pastehtml != adjustpastehtml) {
- bd.innerHTML = adjustpastehtml;
- }
- delete this._beforePasteHTMLPos;
- }
- }
- },
- destroy : function() {
- if (this._measureDiv) {
- this._measureDiv.parentNode.removeChild(this._measureDiv);
- delete this._measureDiv
- }
- if (this.adjustTimer) {
- clearInterval(this.adjustTimer)
- delete this.adjustTimer
- }
- FloatHtmlEditor.superclass.destroy.call(this)
- },
- enableAlignments : false,
- enableFont : false,
- enableLinks : false,
- enableSourceEdit : true,
- // 清理excel,word copy paste的内容,code from HtmlLintEditor
- dirtyHtmlTags : [
- // http://stackoverflow.com/questions/2875027/clean-microsoft-word-pasted-text-using-javascript
- // http://stackoverflow.com/questions/1068280/javascript-regex-multiline-flag-doesnt-work
- {
- regex : /<!--[\s\S]*?-->/gi,
- replaceVal : ""
- },
- // http://www.1stclassmedia.co.uk/developers/clean-ms-word-formatting.php
- {
- regex : /<\\?\?xml[^>]*>/gi,
- replaceVal : ""
- }, {
- regex : /<\/?\w+:[^>]*>/gi,
- replaceVal : ""
- }, // e.g. <o:p...
- {
- regex : /\s*MSO[-:][^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*MARGIN[-:][^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*PAGE[-:][^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*TAB[-:][^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*LINE[-:][^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*FONT-SIZE[^;"']*/gi,
- replaceVal : ""
- }, {
- regex : /\s*LANG=(["'])[^"']*?\1/gi,
- replaceVal : ""
- },
- // keep new line
- {
- regex : /<(P)[^>]*>([\s\S]*?)<\/\1>/gi,
- replaceVal : "$2<br>"
- }, {
- regex : /<(H\d)[^>]*>([\s\S]*?)<\/\1>/gi,
- replaceVal : "$2"
- },
- {
- regex : /\s*\w+=(["'])((|\s|;)*|\s*;+[^"']*?|[^"']*?;{2,})\1/gi,
- replaceVal : ""
- }, {
- regex : /<span[^>]*>(|\s)*<\/span>/gi,
- replaceVal : ""
- },
- // {regex: /<([^\s>]+)[^>]*>(|\s)*<\/\1>/gi, replaceVal: ""},
- // http://www.codinghorror.com/blog/2006/01/cleaning-words-nasty-html.html
- {
- regex : /<(\/?title|\/?meta|\/?style|\/?st\d|\/?head|\/?html|\/?body|\/?link|!\[)[^>]*?>/gi,
- replaceVal : ""
- }, {
- regex : /(\n(\r)?){2,}/gi,
- replaceVal : ""
- }],
- syncValue1 : function() {
- if (this.initialized) {
- var bd = this.getEditorBody();
- var html = bd.innerHTML;
- if (this.hasDirtyHtmlTags(html)) {
- // Note: the selection will be lost...
- bd.innerHTML = this.cleanHtml(html);
- if (Ext.isGecko) {
- // Gecko hack, see:
- // https://bugzilla.mozilla.org/show_bug.cgi?id=232791#c8
- this.setDesignMode(false); // toggle off first
- this.setDesignMode(true);
- }
- }
- }
- },
- hasDirtyHtmlTags : function(html) {
- if (!html)
- return;
- var hasDirtyHtmlTags = false;
- Ext.each(this.dirtyHtmlTags, function(tag, idx) {
- return !(hasDirtyHtmlTags = html.match(tag.regex));
- });
- return hasDirtyHtmlTags;
- },
- cleanHtml : function(html) {
- if (!html)
- return;
- Ext.each(this.dirtyHtmlTags, function(tag, idx) {
- html = html.replace(tag.regex, tag.replaceVal);
- });
- // http://www.tim-jarrett.com/labs_javascript_scrub_word.php
- html = html.replace(new RegExp(String.fromCharCode(8220), 'gi'), '"'); // “
- html = html.replace(new RegExp(String.fromCharCode(8221), 'gi'), '"'); // ”
- html = html.replace(new RegExp(String.fromCharCode(8216), 'gi'), "'"); // ‘
- html = html.replace(new RegExp(String.fromCharCode(8217), 'gi'), "'"); // ‘
- html = html.replace(new RegExp(String.fromCharCode(8211), 'gi'), "-"); // –
- html = html.replace(new RegExp(String.fromCharCode(8212), 'gi'), "--"); // —
- html = html.replace(new RegExp(String.fromCharCode(189), 'gi'), "1/2"); // ½
- html = html.replace(new RegExp(String.fromCharCode(188), 'gi'), "1/4"); // ¼
- html = html.replace(new RegExp(String.fromCharCode(190), 'gi'), "3/4"); // ¾
- html = html.replace(new RegExp(String.fromCharCode(169), 'gi'), "(C)"); // ©
- html = html.replace(new RegExp(String.fromCharCode(174), 'gi'), "(R)"); // ®
- html = html.replace(new RegExp(String.fromCharCode(8230), 'gi'), "..."); // …
- return FloatHtmlEditor.superclass.cleanHtml.call(this, html);
- }
- })
发表评论
-
Ext6 treePanel默认加载两级或多级本地树信息其他加载远程数据
2018-03-21 16:54 778代码使用如下: Ext.define('user.v ... -
Ext4 viewConfig getRowClass 背景颜色修改
2016-03-02 01:28 2197css .my_row_red .x-grid-cell ... -
Ext4 treePanel checkBox选择样例
2015-12-27 13:57 2061/** * 功能主程序类 */ Ext.defin ... -
Extjs4 获取node
2014-07-22 16:17 932var node=treePanel.getStore().g ... -
Extjs4 节点刷新
2014-07-09 15:05 1107ext4以前的节点刷新,只需要 node.reload()即可 ... -
Extjs4 grid 修改后去掉红三角
2014-03-19 16:09 1231Extjs4 gridPanel 中添加以下配置,修改后, ... -
Extjs4 comboBox 动态赋值
2014-03-12 10:35 1892//首先先定义comboBox的Model Ext.de ... -
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
2014-03-03 13:45 5502最近遇到一个刺手的问题,折腾了好久,一直没找到原因,问题是: ... -
Extjs4 gridpanel 鼠标放上,qtip数据提示
2014-01-27 13:58 2372colModel : new Ext.grid.Colum ... -
Extjs4 comboBox qtip
2014-01-27 13:54 1451// 数据 var _Store = new Ext.da ... -
Extjs4 treepanel 选中当前 节点
2014-01-27 13:45 7357Extjs3 中 可以这样获取 this.getNodeBy ... -
Extjs4 ref 不支持。可以通过query查询
2014-01-15 11:04 1956var panel = new Ext.panel.Pane ... -
Extjs4 fieldLabel width
2014-01-14 16:49 5549var wordName = new Ext.form.Te ... -
Extjs4 gridPanel 编辑
2014-01-03 16:48 0Ext.grid.RowEditor.prototype.s ... -
Extjs4 分页绑定参数
2014-01-03 14:22 1127//注意红字部分。由于分页的时候,需要带上原始的参数。所以需 ... -
Ext textField 回车 提交
2013-12-16 17:11 962var name = new Ext.form.TextFi ... -
Extjs4 gridPanel 列按照百分比分配宽度
2013-12-16 17:05 5010//下面红色部分设置属性值,看注释 var _store ... -
Extjs4 加多个tbar
2013-12-16 16:55 3421var tbar = Ext.create('Ext.too ... -
Ext4 MessageBox buttons 显示中文与Ext3中区别
2013-10-24 14:45 1063Ext3 中通过 buttons可以设置中文名称的按钮。如 ... -
Ext gripPanel ColumnModel设置width宽度比
2012-12-26 16:04 1075定义gridPanel时添加viewConfig: {for ...
相关推荐
这个“ExtJS3.3中文API.CHM”文档是为中文用户特别准备的,帮助他们更好地理解和使用ExtJS 3.3的各种功能。 CHM文件,全称是Microsoft Compiled HTML Help,是微软推出的一种帮助文件格式,它将HTML文件打包成单一...
2. **布局管理**:EXTJS 强大的布局管理器允许开发者灵活地安排页面元素,如Fit布局、Border布局、Form布局等,适应各种屏幕尺寸和响应式设计需求。 3. **数据绑定**:EXTJS 3.3 支持双向数据绑定,使得UI组件可以...
10. **API参考**:EXTJS 3.3的中文文档还包含了一个详细的API参考,列出了所有可用的类、方法、属性和事件,便于开发者查找和使用。 总的来说,EXTJS 3.3中文文档是学习和开发EXTJS应用程序的重要资源。通过深入...
本文档关于ExtJs 3.3 的中文API。 本文档关于ExtJs 3.3 的中文API。 本文档关于ExtJs 3.3 的中文API。 本文档关于ExtJs 3.3 的中文API chm
extjs3.3教程.中文教程。程序员福利。
ExtJS3.3版本的API.此版本为Ext JS 3.3正式版API的翻译,大体完成了翻译的工作。我们把当前已完成汉化的公开。另有基于源码的翻译版本,请到项目站点下载;
这个“ExtJS+3.3+API+中文文档”压缩包包含了关于ExtJS 3.3版本的重要资源,特别是中文版的API文档,这对于理解和开发基于此版本的Web应用至关重要。 在ExtJS 3.3中,开发者可以利用其丰富的组件库来创建复杂的用户...
Extjs3.3+swfUpload2.2 实现多文件上传组件是一种功能强大且灵活的文件上传解决方案,适用于各种 Web 应用程序。该组件的实现主要基于 swfUpload2.2 和 Extjs3.3,提供了良好的用户体验和可扩展性。
描述中提到的“ExtJS3.3的开发文档,可以方便查询各个类的使用说明!”揭示了这个CHM文件( Compiled HTML Help,微软的一种帮助文件格式)的内容。开发者可以通过这份文档快速查找ExtJS 3.3中的各个类,了解它们的...
ExtJS中文帮助文档,暂没发现与开发包api的遗漏项。
ExtJS 3.3的核心是其组件系统,它允许开发者使用各种预定义的UI组件(如表格、窗口、菜单、按钮等)来构建复杂的用户界面。每个组件都具有自己的事件处理、样式和布局管理,使得构建模块化的应用程序变得容易。 2....
这一现象在ExtJS 3.3版本中出现,在其他版本如ExtJS 2.2中则正常工作。 ### 二、示例代码分析 #### 1. HTML结构 ```html <!DOCTYPE ...
ExtJs 3.3 中文api,中文帮助文档,是ExtJs3.3很实用的开发手册,希望可以帮助朋友们。
ExtJs3.3 API CHM
其实我也不知道extjs这几个版本的区别,其中一个是我在脚本之家下载的,我看了下不知道有什么区别,上传给大家参考下。extjs不论中文还是英文版的API都是免费的,但有人上传了还要别人的下载积分,我觉得这样做是...
1.此版本为Ext JS 3.3正式版API的翻译,大体完成了翻译的工作。我们把当前已完成汉化的公开。另有基于源码的翻译版本,请到项目站点下载; 2.翻译小组的汉化工作业已暂告一段落了,但接受任何提交的BUG或建议以持续...
这个中文API文档版本3.3为我们提供了关于ExtJs 3.3版本的详细信息,包括各种组件、类、方法和事件的说明,使得开发者在使用这个框架时能更加得心应手。下面将详细介绍ExtJs 3.3中的主要知识点。 1. **组件体系结构*...
总体而言,这篇学习笔记和相关资源将帮助读者深入理解ExtJS3.3版本的核心概念,如组件系统、数据绑定、事件处理以及源码解析,同时也能提供对ExtJS 4桌面应用开发的见解,这对于想要扩展知识面或解决特定问题的ExtJS...
extjs 4.2 的HtmlEditor在chrome中高亮文字