0
votes

I have a function that after 3000 seconds call other function to check new data for a grid.

onViewDestroy: function(view) {
        console.log('view destroy');
        var me = this;
        if(me.timer) clearTimeout(me.timer);
    },
    afterRender: function(){

     // start timer to load log grid in 3 secs
         me.logTimer = setTimeout(Ext.bind(me.checkProcessLog, me), 3000);

    },    
    checkProcessLog: function() {
                console.log('check process log');

                var me = this,
                   requestGrid = me.getRequestGrid(),
                   logGrid = me.getProcessLog(),
                   logStore = logGrid.getStore();

                var selectedRecord = requestGrid.getSelectionModel().getSelection()[0];

                // if the grid is expanded and the status of the process is pending or in progress
                if (!logGrid.collapsed && (selectedRecord.get('Status') == 0 || selectedRecord.get('Status') == 1)) {

                    logStore.load({
                        callback: function(records, op, success) {

                            if (success) {

                                // start timer to load again log grid in 3 secs
                                me.logTimer = setTimeout(Ext.bind(me.checkProcessLog, me), 3000);

                            }

                        }
                    });

                }

            },

The problem that I have is that if I close my view (destroy) when the function has been called then all my variables such:

  requestGrid = me.getRequestGrid(),
    logGrid = me.getProcessLog(),
    logStore = logGrid.getStore();

I get the error:

Cannot read property 'getStore' of undefined

And that make sense because the view has been destroyed. Any workaround to avoid this?

1

1 Answers

1
votes

A simple check will do it :

requestGrid = me.getRequestGrid(),
logGrid = me.getProcessLog();
if(!logGrid) return false
logStore = logGrid.getStore();

This also will stop the function beeing called.