【问题标题】:Implementing Task Runner for store output in ExtJS在 ExtJS 中实现用于存储输出的 Task Runner
【发布时间】:2019-06-29 18:27:03
【问题描述】:

我对 ExtJS 还很陌生,我有点陷入其中一个问题,所以我需要你的帮助。

基本上我使用以下 URL 访问我的应用程序:

servername:port/XMII/CM/XYZ/index.html?machine=1&typeofpage=dashboard

我通过全局控制器 getMode() 中使用的以下代码获取这些 URL 参数 machine 和 typeofpage:

//get the url parameters
var url = window.location.search,
urlParams = Ext.Object.fromQueryString(url);

return {

    machineID: urlParams.machine,
    typeofPage: urlParams.typeofpage
};

现在根据页面类型,我通过初始视口的afterrender方法中的以下代码来决定打开哪个页面:

var mode = this.getMode();

if(mode.typeofpage=== 'dashboard') {

      panel = Ext.create('XYZ.view.Dashboard',{
        ID_MACHINE: mode.machineID
    });

          component.add(panel);

}

所以上面的代码正确调用了我的仪表板页面,将 machineID 正确地传递为 1。

使用此 machineID 属性,我将其传递给存储 MachineParts,此存储为我提供机器 ID 1 的所有机器部件。以下是 XYZ.view.Dashboard 的 aferrender 中的代码:

var me = this,
    machinepartIds= [];

Ext.defer(function(){

    component.mask('Loading...');

    me.getStore('MachinePart').load({
            params:{
                'Param.1': component.ID_MACHINE
            },
            callback: function(response) {
                component.unmask();
                Ext.each(response, function(panel) {
                    machinepartIds.push(panel.get('MachinePartID'));

                });
   alert('Machine IDs: ' + machinepartIds.toString();
        }
    });
},10);

所以可以说它给了我以下数据:

MachineID    MachinePartID
   1               20
   1               21
   1               22

现在我有一个名为 loadKPIs 的函数,它以参数为 ID - 即 machinepartID。我使用这个 loadKPIs 函数来填充页面上的所有 KPI,并将它们显示为仪表板的特定机器部件 ID。

我想每 10 分钟将 machinepartIDs 20、21、22 传递给 loadKPIs 函数,以便我可以在 10 分钟内显示每个机器部件的仪表板。

例如,我将从机器部件 ID 20 开始。10 分钟后,我想将机器部件 ID 传递为 21。10 分钟后,我想将机器部件 ID 传递为 22。然后在 10 分钟后再次返回 20。我确定我需要使用 TaskRunner,但我不知道该怎么做。

【问题讨论】:

  • 不要忘记使用该答案中的复选框将答案标记为答案。投票是不够的。

标签: extjs extjs4 extjs5 sencha-architect


【解决方案1】:

如果你想使用Ext.util.TaskManager间隔调用一个函数,并且有一个友好的API和控件来随时启动/停止,这里有一个简单的代码sn-p:

var task = Ext.util.TaskManager.newTask({
    interval : 600000,
    scope    : this,
    run      : function() {}
});

Ext.util.TaskManager.start(task);

当然你也可以使用setInterval:

setInterval(function() {
    doSomething();
}, 6000000);

【讨论】:

    【解决方案2】:

    尝试在应用程序或仪表板内设置计时器。例如

    var machineParts = [20, 21, 22];
    setTimeout(function() {
        YourApp.app.redirectTo('servername:port/XMII/CM/XYZ/index.html?machine=' + machinParts.shift() + '&typeofpage=dashboard');
    }, 10 * 60 * 1000);
    

    但是,这会导致该页面重新加载,因此最好在您的仪表板中实现类似的东西,这只会改变您显示机器部件相关内容的面板。

    【讨论】:

    • 机器在 URL 中将始终保持为 1 或 2。根据机器 ID(1 或 2),我将获得机器零件(20、21、22)。我需要每 10 分钟调用一次机器零件 20、21、22 的 loadKPI 函数。
    • 在仪表板代码中添加一个类似的计时器,然后调用 loadKPI 函数。
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多