Extjs4 似bug非bug的东西修改
阅读原文时间:2023年07月11日阅读:1

/** hzm modify
* method: Ext.panel.Table.hasLockedColumns: function(columns) {}
* function:支持extjs grid colums三元表达式,tbar支持三元表示
eg: user.users_type == 2 ? {text: "创建日期", flex: 1, dataIndex: 'create_time'} : null,
var grid = Ext.create('Ext.grid.Panel', {
columns: [
new Ext.grid.RowNumberer(),
user.users_type == 1 ? {text: "创建日期", flex: 1, dataIndex: 'create_time'} : null,
{text: "备注", flex: 1, sortable: true, dataIndex: 'remark'}
]
});

    user.users\_type == 1 ? {  
        text:'添加会员',  
        iconCls:'add',  
        handler:function() {  
            MyDesktop.MemberWindow.member.addOrUpdateMember();  
        }  
    } : null,  
    user.users\_type == 1 ? '-' : null  
 \* note: 添加if判断column是否为空

//源代码:  
if (!column.processed && column.locked) {  
    return true;  
}  
\*/  
Ext.override(Ext.panel.Table, {  
    hasLockedColumns: function(columns) {  
        var i,  
            len,  
            column;

        if (Ext.isObject(columns)) {  
            columns = columns.items;  
        }  
        for (i = 0, len = columns.length; i < len; i++) {  
            column = columns\[i\];

            if (column && !column.processed && column.locked) {  
                return true;  
            }  
        }  
    }  
});

/\*\*  
 \* hzm modify  
 \* method: Ext.data.Connection.onComplete : function(request, xdrResult)  
 \* function: gridpanel数据加载出错时(服务器内部错误),支持返回错误原因  
 \*/  
Ext.override(Ext.data.Connection, {  
    onComplete : function(request, xdrResult) {  
        var me = this,  
            options = request.options,  
            result,  
            success,  
            response;

        try {  
            result = me.parseStatus(request.xhr.status);  
        } catch (e) {  
            // in some browsers we can't access the status if the readyState is not 4, so the request has failed  
            result = {  
                success : false,  
                isException : false  
            };

        }  
        success = me.isXdr ? xdrResult : result.success;

        if (success) {  
            response = me.createResponse(request);  
            me.fireEvent('requestcomplete', me, response, options);  
            Ext.callback(options.success, options.scope, \[response, options\]);  
            /\*\*  
             \* hzm modify start  
             \* method: Ext.data.Connection.onComplete : function(request, xdrResult)  
             \* function: gridpanel数据加载出错时(服务器内部错误),支持返回错误原因  
             \* note: 原生系统,无以下段代码  
             \*/  
            if(response && options.operation && !options.operation.response) {  
                options.operation.response = response;  
            }  
            /\*  
             \* modify end  
             \*/  
        } else {  
            if (result.isException || request.aborted || request.timedout) {  
                response = me.createException(request);  
            } else {  
                response = me.createResponse(request);  
            }  
            me.fireEvent('requestexception', me, response, options);  
            Ext.callback(options.failure, options.scope, \[response, options\]);  
        }

        Ext.callback(options.callback, options.scope, \[options, success, response\]);  
        delete me.requests\[request.id\];  
        return response;  
    }  
});

/\*\*  
 \* hzm modify  
 \* method: Ext.selection.Model.getSelection : function()  
 \* function: 当修改并reload后未更新当前grid selected range中的record  
 \*/  
Ext.override(Ext.selection.Model, {  
    getSelection: function() {  
        var me = this,  
            store = me.store,  
            arr = this.selected.getRange();

        for(var i = 0; arr && i < arr.length; i++) {  
            try {  
                var record = arr\[i\];  
                var newRecord = store.getById(record.get(record.idProperty));  
                if(newRecord) {  
                    arr\[i\] = newRecord;  
                }  
            } catch(e) {  
                alert('ext\_override getSelection出现异常,详细信息:' + e);  
            }  
        }  
        return arr;  
    }  
});