使用Ext.util.TaskRunner在负载掩码中显示时钟



使用ExtJS 5.1.0。

实在想不出其他的方法来做这件事,但是我需要一个计时器来显示在一个加载掩码中,同时等待一个Ajax响应。在success上,我将取消掩码并销毁定时器。

没有Ext.util.TaskRunner的代码工作得很好,所以我的修改是这样做的:

    task = runner.start({
        run:  function () {
            // show loadMask during request
            Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A'));
        },
        interval: 10
    });
    // payload for POST
    obj = {
        query: {
            payload: atom
        }
    };
    Ext.Ajax.request({
        cors: true,
        timeout: 600000, //default is 30 seconds
        useDefaultXhrHeader: false,
        url: url,
        jsonData: obj,
        headers: {
            'Accept': 'application/json'
        },
        disableCaching: false,
        success: function(response) {
             // do stuff
             // stop loadMask
             Ext.getBody().unmask();
             Ext.util.TaskRunner.destroy(task);
        }
    });

success上,它是"做东西",但它现在没有破坏计时器,现在它没有删除掩码(这是确认的,因为我得到一个错误:TypeError: Ext.util.TaskRunner.destroy is not a function. (In 'Ext.util.TaskRunner.destroy(task)', 'Ext.util.TaskRunner.destroy' is undefined)

我意识到TaskRunner将继续运行,直到它被破坏或停止,但这似乎不像预期的那样工作。

我最终需要在Ajax调用的生命周期内执行任务,并且我意识到我多次调用LoadMask来实现我所需要的。

---- EDIT ----

得到它,部分:我错过了repeat配置参数(我之前尝试过repeat参数,没有使用interval参数,它不起作用,但是这些的组合正是让它工作所需要的。哎!您认为他们会在文档中给出这个简单的用例作为示例,但是唉……):

task = runner.start({
        run:  function () {
            // show loadMask during request
            Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A'));
        },
        interval: 10,
        repeat: 1
    });
有了这个,我不需要在对象上发布stopdestroy

然而,时钟没有按预期更新,这是有道理的,因为任务只运行一次。看来我还是被困住了。

终于找到了!

下面是有效的配置:

    var task, runner = new Ext.util.TaskRunner();
    task = runner.newTask({
        run:  function () {
            // show loadMask during request
            Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A'));
        },
        interval: 10000
    });
    task.start();

然后一个简单的task.stop();在成功回调发生时停止任务。缺失的关键似乎是定义一个NewTask.有趣。我想更仔细地阅读Sencha文档中的示例会有所帮助。

最新更新