在Store的Beforeload中丢失变量

时间:2013-12-19 23:43:40

标签: extjs extjs4

我有一个商店,我使用三种不同的方式 - 从我的数据库中搜索,编辑和删除垃圾箱。 商店需要bin的Beforeload变量:

BinDetailsStore.on('beforeload', function() {
        BinDetailsStore.getProxy().extraParams = {
            bin: bin
        }
    }, this);

从另一个功能我也能够通过成功添加bin来显示bin详细信息:

...
button.up('form').submit({
                            clientValidation: false,
                            url: 'binsites/addbin?bin=' + bin + '&size=' + size + '&bintype=' + bintype + '&stat=' + stat + '&bpid=' + bpid + '&rte=' + rte,
                            success: function() {
                                Ext.Msg.alert('Bin Added', 'Bin ' + bin + ' added');
                                deleteFlag = false;
                                BinDetailsStore.load();

                                popBinAdd.close();
                                popBinAdd = null;
                            }
                        });

但是,当我编辑bin的详细信息并尝试以这种方式重新加载商店时

...
button.up('form').submit({
                    url: 'binsites/editbin?bid=' + bid + '&size=' + newSize + '&type=' + newType + '&bin=' + bin,
                    success: function() {
                        Ext.Msg.alert('Bin Saved', 'Bin ' + bin + ' has been saved');
                        //Ext.Msg.alert(bin);
                        editFlag = false;
                        binEdForm.close();
                        binEdForm = null;
                        BinDetailsStore.load();
                    }
                });

详细信息save和调用成功调用但是在beforeload事件被命中时我丢失了bin的值。 我已经尝试在成功函数中重新定义bin并将bin传递给另一个函数来调用BinDetailsS​​tore上的加载(bin转移到新函数但是在beforeload中再次丢失)无济于事。

Bin定义如下:

BinDetailsStore.on('load', function() {
        if (deleteFlag) {
            bin = null;
            bid = null;
            size = null;
            bintype = null;
            stat = null;
            this.binDelConfirm(bin, bid, size, bintype);
        } else if (editFlag) {
            bin = null;
            bid = null;
            size = null;
            updated = null;
            bintype = null;
            stat = null;
            desc = null;
            this.binEditForm(bin, bid, size, updated, bintype, stat, desc);
        } else {
            this.loadSearchResults();
        }
    }, this);

因为editFlag处于活动状态,所以它会传递给binEditForm:

binEditForm: function(bin, bid, size, updated,  bintype, stat, descr) {
    if (binEdSer) {
        binEdSer.close();
        binEdSer = null;
    }
    if (binEdForm) {
        binEdForm.close();
        binEdForm = null;
    }
    if (binResult) {
            binResult.destroy();
            binResult = null;
    } 
    if (cusResult) {
        cusResult.destroy();
        cusResult = null;
    }

    if (!bin && !bid && !size && !updated && !bintype && !stat && !desc) {
      if (BinDetailsStore.getTotalCount()) {
        rec = BinDetailsStore.getAt(0);

        bin = rec.get('number');
        bid = rec.get('id_');
        size = rec.get('size');
        updated = rec.get('updated');
        bintype = rec.get('bintype');
        if (rec.get('cust_type') == 'Park' || rec.get('cust_type') == 'Truck') {
                stat = rec.get('cust_type') + ' - ' + rec.get('park');
            } else {
                stat = rec.get('cust_type');
            }
        desc = rec.get('desc_');
      }
    }

简而言之,我想知道为什么当BinDetailsS​​tore beforeload事件被触发时bin的值会消失。

感谢您的时间和任何帮助表示赞赏。

0 个答案:

没有答案