`
wangs7345
  • 浏览: 12016 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ExtJs自定义Button的xtype在拥有buttons配置项的组件中无效

阅读更多

对ExtJs的Button进行自定义封装时: 

Ext.Button.ConfirmBtn = Ext.extend(Ext.Button, {
			minWidth : 65,
			text : '确定',
			iconCls : 'confirm'
		});
Ext.reg('confirmBtn', Ext.Button.ConfirmBtn);

  

此时,拥有buttons配置项的组件代码如下: 

buttons : [{
			xtype : 'confirmBtn'
		}, {
			minWidth : 65,
			text : '确定',
			iconCls : 'confirm'
		}]

 

展示的效果没到达预期: 

 

几经翻代码,找到问题所在,原来在ExtJs的Panel源码中的initComponent函数里面 this.buttons.push(Ext.create(btns[i], 'button'));将button写死了: 

        if(this.buttons){
            this.elements += ',footer';
            var btns = this.buttons;
            this.buttons = [];
            for(var i = 0, len = btns.length; i < len; i++) {
                if(btns[i].render){ // button instance
                    this.buttons.push(btns[i]);
                }else if(btns[i].xtype){
                    this.buttons.push(Ext.create(btns[i], 'button'));//问题出现在这里
                }else{
                    this.addButton(btns[i]);
                }
            }
        }

 
 找到出错原因,对其重写:  

				if (this.buttons) {
					this.elements += ',footer';
					var btns = this.buttons;
					this.buttons = [];
					for (var i = 0, len = btns.length; i < len; i++) {
						if (btns[i].render) { // button instance
							this.buttons.push(btns[i]);
						} else if (btns[i].xtype) {
							this.buttons.push(Ext.ComponentMgr.create(btns[i],
									btns[i].xtype));//根据传入的xtype动态新建
						} else {
							this.addButton(btns[i]);
						}
					}
				}

 

最终效果如下,达到预期:



  

PS

ExtJs3.4之前的版本都出现这样的情况,应该是ExtJs自身对buttons的限制只允许为Button

    /**
     * @cfg {Array} buttons
     * 在面板底部加入按钮,{@link Ext.Button}配置的数组。
     * An array of {@link Ext.Button}s or {@link Ext.Button} configs used to add buttons to the footer of this panel.
     */

 

原创文章,码字不易,转载请注明出处,谢谢。

永久链接: http://wangs7345.iteye.com/blog/2106501

 

  • 大小: 2.9 KB
  • 大小: 3 KB
1
0
分享到:
评论

相关推荐

    批量上传文件 EXTJS文件上传 上传组件

    在EXTJS中,实现批量上传文件是一项常见的需求,尤其在处理大量数据或媒体文件时。EXTJS的文件上传组件提供了方便的方式来处理这些任务,允许用户一次性选择多个文件进行上传,极大地提高了工作效率。 批量上传文件...

    extjs开发指导3.pdf

    在EXTJS中,组件配置主要通过两种方式实现: 1. **逗号分隔参数列表配置** - 这种方式适用于配置项较少且简单的场景。例如,EXTJS的`Ext.Msg.alert`方法用于创建提示框,其接受逗号分隔的参数,如`'提示','内容'`,...

    Extjs学习—总结的extjs的一些常用小知识点

    13. **`buttons` 配置项**: - 作用:定义窗口中的按钮。 - 示例代码:创建一个带有“确定”按钮的配置项。 - 说明:定义了一个“确定”按钮,并指定了点击按钮后的回调函数,该函数用于隐藏当前窗口。 #### 三...

    ExtJs2.0简明教程

    布局是ExtJS中用于控制组件如何在容器中排列的方式。ExtJS支持多种布局类型,每种布局都有自己的特点和适用场景。 #### 6.2 Border区域布局 Border布局将容器分为五个区域:上(top)、下(bottom)、左(left)、右...

    extjs中的formPanel以及表单的应用

    FormPanel 是 ExtJS 中的一个核心组件,用于创建和处理表单元素,包括输入字段、按钮、选择框等。它提供了丰富的功能,如数据验证、远程提交、异步加载等,是构建用户交互界面的关键部分。 在ExtJS中,FormPanel是...

    如何提交Extjs 中的表单

    在ExtJS中,提交表单是一项常见的操作,用于将用户在表单中填写的数据发送到服务器进行处理。本文将详细讲解如何在ExtJS环境中实现表单的提交,并结合Java Web后端进行交互。 首先,我们需要了解ExtJS中的表单组件...

    learning extjs 中文版 表单提交

    2. **Params**: 在提交表单时,可以通过`params`配置项传递额外的参数,这些参数可以是静态值,也可以是动态计算的结果。 3. **Success and Failure Handling**: 通过设置`success`和`failure`处理器,可以处理...

    学习ExtJS 访问容器对象

    `items`通常包含了子组件的配置对象,包括`xtype`(组件类型)、`id`(组件ID)和其他配置项。 二、应用举例 以下代码展示了如何在ExtJS中创建一个简单的窗口,并在其中包含一个文本字段和一个按钮。当点击“确定...

    java文件上传

    在Java开发中,文件上传是一项常见的任务,尤其在构建Web应用程序时。文件上传允许用户将本地文件发送到服务器,这在各种场景下都非常有用,比如用户上传头像、提交作业或者分享大文件。本篇文章将深入探讨Java中的...

    Ext2.0 form使用实例

    在Web应用开发中,ExtJS库提供了强大的用户界面组件,其中FormPanel是用于创建复杂表单的重要组件。本文将详细介绍Ext2.0 FormPanel的使用,包括创建方法、控件配置以及布局管理。 首先,我们需要初始化提示信息...

    EXT提交表单,ASP.NET

    1. **定义表单组件**:使用`Ext.form.Panel`创建表单,定义字段如文本框、下拉框等,每个字段都有相应的ID和配置项。 2. **配置表单行为**:为表单添加提交按钮,并设置`action`属性,这个属性可以指向ASP.NET的...

    学习ExtJS Window常用方法

    defaults: { // 默认配置项 xtype: "textfield", // 输入框类型 width: 180 // 输入框宽度 }, items: [ // 窗口内的元素 { fieldLabel: "帐号" }, // 用户名输入框 { fieldLabel: "密码" } // 密码输入框 ],...

Global site tag (gtag.js) - Google Analytics