当一个事件仍在进行中时,如何禁止用户多次单击操作列extjs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当一个事件仍在进行中时,如何禁止用户多次单击操作列extjs相关的知识,希望对你有一定的参考价值。

我有一个操作列,我在某些情况下禁用它并有一个处理程序来进行ajax调用。但我想限制用户或拨打多个电话,直到一个电话完成。我不希望用户在单击时双击该图标。

ViewController方法:

    processDone: function (record) {
    //debugger;
    var me = this;
    var detailRecs = me.getStore('WarrantyDetail').data.items;
    if (!Ext.isEmpty(record) && (detailRecs.length > 0)) {
        canProcess = false;
        Ext.Array.forEach(detailRecs, function (r) {
            if (r.data.facilityId == 9 || r.data.amount == 0 || 
         Ext.isEmpty(record.data.qeContact)) {
                canProcess = true;

            }
        });
        if (canProcess) {
            Ext.Msg.alert('Invalid detail line item ');
            return;
        }        
        var detailLineAmt = me.getStore('WarrantyDetail').sum('amount');
        detailLineAmt = Math.abs(detailLineAmt);
        var headerAmount = Math.abs(record.data.amount)
       //if (me.getStore('WarrantyDetail').sum('amount') > 

     Math.abs(record.data.amount)){
            if (detailLineAmt > headerAmount){//added to check for range
               Ext.Msg.alert('Sum of Detail Amount must not be more than `
            Header Amount ');`
            return;
        }

        Ext.Ajax.request({
            url: webContext + 'url',
            success: function (response) {
                me.getStore('WarrantyHeader').reload();
            },
            failure: function (response) {
                me.getStore('WarrantyHeader').reload();
            }
        });
        this.getViewModel().set('currentHeader', null);
    } else if (!Ext.isEmpty(record) && (detailRecs.length == 0)) {
        Ext.Msg.alert('Please add atleast one detail lineItem');
    }
}

行动专栏

if (this.showDone) {
Ext.Array.insert(this.columns, 0, [{
                xtype: 'actioncolumn',
                width: 30,
                minWidth: 30,
                resizable: false,
                menuDisabled: true,
                items: [{
                    icon: 'resources/images/icons/approve_icon.png', 
                    tooltip: 'Flag Record as Done',
                    stopSelection: false,

                    handler: function (tableview, rowIndex) {
                        var rec = tableview.grid.getStore().getAt(rowIndex);
                        if (rec.data.qualityDone) {
                            return;
                        }
                        if 
(!tableview.grid.getSelectionModel().isSelected(rec)) {
                            tableview.grid.getSelectionModel().select(rec);
                            Ext.Function.defer(function () {
                                tableview.grid.doDone(rec);
                            }, 250);
                        } else {
                            tableview.grid.doDone(rec);
                        }

                    },
                    isDisabled: function (view, rowIndex, colIndex, 
                item,record) {
                        var done = record.data.qualityDone;
                        if (FACTT.app.isQualityUser()) {
                            return done;
                        } else if (FACTT.app.isARUser() && done) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                }],
                renderer: function (value, meta, record, row, column, store, 
                    view) {
                    /* To conditionally hide the icon specified in the icon 
                          config above. eg */
                    var colItem1 = meta.column.items[0],
                        imgPath = 'resources/images/icons';

                    if (!record.data.qualityDone) {

                        //colItem1.disabled = false;
                        if (!record.data.qualityDone && 
                       FACTT.app.isARUser()) {
                            colItem1.icon = imgPath + 
                                    '/padlock_unlockedgray.png';
                        } else {
                            colItem1.icon = imgPath + 
                            '/padlock_unlocked.png';
                            colItem1.tooltip = 'Click here to complete & 
                 submit the record to AR';
                        }
                    } else if (record.data.qualityDone && 
                  FACTT.app.isARUser()) {
                        colItem1.icon = imgPath + '/padlock_lockedblue.png';
                        colItem1.tooltip = 'Header record is Locked. Please 
                   click on the Detail record to create an adjustment';

                    } else {
                        colItem1.icon = imgPath + '/padlock_locked2.png';
                        colItem1.tooltip = 'Header record is Locked';

                    }

                }
            }
答案

在操作列中为您的记录设置一个标志属性,并在您的ajax返回响应时将其设置回默认值。当您想要调用ajax时,请检查该标志属性。例如,在您的操作列处理程序中:

handler: function (tableview, rowIndex) {
       var rec = tableview.grid.getStore().getAt(rowIndex);
       if(!rec.ajaxFlag){
            //call your ajax here...
            rec.ajaxFlag = true;
       } 
}

在你的ajax中这样做:

Ext.Ajax.request({
        url: webContext + 'url',
        success: function (response) {
            record.ajaxFlag = false;//set flag to false
        },
        failure: function (response) {
            record.ajaxFlag = false;//set flag to false
        }
});

以上是关于当一个事件仍在进行中时,如何禁止用户多次单击操作列extjs的主要内容,如果未能解决你的问题,请参考以下文章

GtkTreeView 列标题点击事件

Ext JS:获取特定行的操作列

单击按钮后事件不会触发

仍在应用移动设备悬停状态上元素上的onClick事件

vue禁止浏览器F5进行刷新和监听浏览器刷新事件

利用jQuery禁止页面的右键单击