extjs6更新掩码消息在长时间运行的方法中未更新,该方法正在使用新系列更新图表

时间:2018-08-22 14:35:25

标签: extjs mask

在我的extjs6项目中,我有这种长期运行的方法。从加载的商店开始,它按“ instrument”分组,然后用“ instrument”的每个项目创建一个数组,然后创建一个仅包含该数据的新商店,然后为extjs图表创建一个序列,并将该序列添加到图表。

有大约100台仪器的大量数据,每天每台仪器2-3年的数据量。该过程需要很长时间,我想更新遮罩窗口以说出要更新的仪器,以便用户可以看到发生了什么。

如何在这种长期运行的方法中间更新掩码消息?

        var me = this;

    var myMask = Ext.get(me.windowCumulative.getEl()).mask('hello');

    var task = new Ext.util.DelayedTask(function () {

        //fadeout section
        myMask.fadeOut({
            duration: 500,
            remove: true
        });

        //convert sql date to date datatype
        myStoreTab1.each(function (record) {
            record.set('filedate', new Date(record.get('filedate')));
        });

        myStoreTab1.sort('filedate');
        myStoreTab1.group('instrument');
        myStoreTab1.getGroups().each(function (group, i) {

            var groupName = group._groupKey;

            var targetStore = Ext.create('Ext.data.Store', {
                model: 'xxx.model.HistoricalInstrumentProfitModel'
            });

            var records = [];

            group.each(function (record) {

                records.push(record.copy());

            });

            targetStore.add(records);

            var series = {
                type: 'line',
                axis: 'left',
                xField: 'filedate',
                yField: 'cumulativePl',
                store: targetStore,
                title: groupName,
                tooltip: {
                    trackMouse: true,
                    renderer: 'onSeriesTooltipRender'
                }
            };
            me.chartTab1.addSeries(series);
            //me.chartTab1.redraw();

            //me.windowCumulative.setLoading(false);

            console.log('added series: ' + groupName);

        });

    });
    task.delay(500);

    //debugger;
    //me.chartTab1.redraw();

更新... 对于每个小组,我都这样做

function DoMask(step, panel, countGroups, group, chart) {

setTimeout(function () {

    var groupName = group._groupKey;

    var targetStore = Ext.create('Ext.data.Store', {
        model: 'xxx.model.HistoricalInstrumentProfitModel'
    });

    var records = [];

    group.each(function (record) {
        records.push(record.copy());
    });

    targetStore.suspendEvents();
    targetStore.add(records);

    var series = {
        type: 'line',
        axis: 'left',
        xField: 'filedate',
        yField: 'cumulativePl',
        store: targetStore,
        title: groupName,
        tooltip: {
            trackMouse: true,
            renderer: 'onSeriesTooltipRender'
        }
    };
    chart.addSeries(series);

    console.log('added series: ' + groupName);
    console.log(count);

    panel.mask('step : ' + count);

    if (count == countGroups) {

        chart.resumeEvents();
        chart.resumeLayouts();
        chart.resumeChartLayout();

        chart.redraw();
        panel.unmask();
    }

    count = count + 1;

}, 500);

}

1 个答案:

答案 0 :(得分:0)

看看这两种向用户展示进度的方法:

这是 FIDDLE

Ext.application({
    name: 'Fiddle',

    launch: function () {

        var count;

        var p = Ext.create('Ext.ProgressBar', {
            width: 300,
            textTpl:  'my Progress {value*100}%'
        });

        var window = Ext.create('Ext.window.Window', {
            title: 'Progress',
            modal:true,
            hidden:true,
            closable:false,
            items:[
                p
            ]
        });

        var panel = Ext.create('Ext.panel.Panel', {
            title: 'teste',
            height: 400,
            renderTo: Ext.getBody(),
            items: [{
                xtype: 'button',
                text: 'START LONG PROCESS MASK',
                handler: function () {
                    count = 0;
                    this.up('panel').mask('Start');
                    DoMask(count);
                }
            }, {
                xtype: 'button',
                text: 'START LONG PROGRESS BAR',
                handler: function () {
                    count = 0;
                    window.show();
                    DoProgress(count);
                }
            }]

        });

        function DoMask(step) {
            setTimeout(function () {
                panel.mask('step : ' + step);
                count++;
                if (count <= 10) {
                    DoMask(count);
                } else {
                    panel.unmask();
                }
            }, 500);
        }

        function DoProgress(step) {
            setTimeout(function () {
                p.setValue(step/10);

                count++;
                if (count <= 10) {
                    DoProgress(count);
                } else {
                    window.hide();
                }
            }, 500);
        }

    }
});