[置顶] Extjs4 grid根据model自动生成列

/**
 * model中设置visible属性使该列可生成,设置editor可以传递编辑器,
 * model中设置columnName可传递列名,默认为model的name为列名
 * grid中设置autoGenerateColumns: true,可使自动生成列 
 * author:dys1990@qq.com
 */
Ext.override(Ext.grid.Panel, {
    initComponent: function() {
        this.autoGenerateColumn();
        this.callParent(arguments);
    }
});


Ext.define('Ext.ux.AutoGenerateColumn', {
    autoGenerateColumn: function() {
        var me = this,
            noModel = Ext.isDefined(me.model) === false,
            noAutoGenerate = Ext.isDefined(me.autoGenerateColumns) === false;

        if (noModel && noAutoGenerate) {
            return;
        }

        if (me.autoGenerateColumns === true) {
            if(Ext.isString(me.model)) {
                me.model = Ext.ModelManager.getModel(me.model);
            }

            var modelFields = me.model.prototype.fields;
            me.columns = new Array();

            // Adding columns to grid
            for (var i=0; i < modelFields.length; i++) {
                var modelField = modelFields.items[i];
                var isVisible = (Ext.isDefined(modelField.visible) && (modelField.visible === true));
				var columnName;
                if (isVisible) {
                	columnName=modelField.name;
                	if(Ext.isDefined(modelField.columnName)){
                		columnName=modelField.columnName;
                	}
                    var column = {
                        text: columnName,
                        dataIndex: modelField.name
                    };

                    if (modelField.type.type === 'floatOrString') {
                        column.renderer = Ext.util.Format.numberOrString;
                    }
					if(Ext.isDefined(modelField.editor)){
						column.editor=modelField.editor;
					}
                    me.columns.push(column);
                }
            }
        }

        if (me.columns.length == 0) {
            Ext.Error.raise('No fields declared in ' + me.model.$className + ' with property visible. Columns will not be created!');
        }
    }
});

Ext.grid.Panel.mixin('AutoGenerateColumn', Ext.ux.AutoGenerateColumn);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值