【问题标题】:How to fireEvent outside of ConsumeEvent function in icCube web-reporting如何在 icCube 网络报告中的 ConsumeEvent 函数之外触发事件
【发布时间】:2016-12-01 16:41:40
【问题描述】:

我想做一个简单的 fireEvent("Refresh","")

来自consumeEvent函数之外的javascript。

因为我希望能够执行一个 setinterval 来触发Event“Refresh” 并将事件名称放在网络报告中的“执行刷新查询”表中

例如,最终表格将每 1 分钟刷新一次。 (我希望能够以不同的时间间隔分别刷新仪表板中的每个表)

问题是我只能从 consumeEvent 函数执行 fireEvent 然后使用 context.fireEvent("Refresh","") 但每次我从仪表板发生不同的事件时都会发生这种情况,而且还不够好

【问题讨论】:

    标签: javascript events iccube


    【解决方案1】:

    可以使用上下文的事件管理器实例在任何地方抛出事件:

    <script type="text/javascript">
         context.eventMgr().fireExternalEvent("eventName", eventValue)
    </script>
    

    如果您有权访问 ic3Reporting 实例,您也可以触发事件:

    例如:

    var ic3Application = ic3.startReport(options);
    

    在这种情况下,您可以通过这种方式触发应用事件:

    <script type="text/javascript">
        //get ic3application instance
        var ic3Application = ic3.startReport(options); 
    
        setInterval(function(){
           ic3Application.fireEvent('table1-refresh', {})
        },60000)
    
        setInterval(function(){
           ic3Application.fireEvent('table2-refresh', {})
        },120000)
    </script>
    

    然后只需将事件名称设置为“执行刷新查询”表的事件。

    更新

    ic3report.html 中的脚本版本

    <script type="text/javascript">
    
            var ic3root = "../" 
            var ic3rootLocal = "../" 
    
            var options = {
                root: ic3root,
                rootLocal: ic3rootLocal,
    
                callback: function () {
                    $('#intro').remove();
    
                      var options = {
                                <!-- ic3-start-report-options (DO NOT REMOVE - USED TO GENERATE FILES) -->
                      };
                      var ic3Application = ic3.startReport(options);
                      setInterval(function () {
                         ic3Application.fireEvent('ic3-table', {})
                      },20000)
                };
    
            ic3ready(options);
    </script>
    

    更新

    这是report 的示例。

    【讨论】:

    • 嘿,我收到控制台错误“VM457:109 Uncaught ReferenceError: context is not defined(...)”,如果我使用 ic3Application,我会收到“VM698:110 Uncaught TypeError: ic3Application. fireevent 不是函数”。问题是如何定义对实例的访问?
    • 只要 javascript 区分大小写,“ic3A​​pplication.fireevent”应该是“ic3A​​pplication.fireEvent”
    • 我尝试了 ic3Application.fireEvent 和 ic3Application.fireExternalEvent 并且我得到了同样的错误
    • 我正在使用新的 icCube Web Reporting : 6.0.1
    • 您能否澄清一下,第三个代码块是否与上面的答案相同,但仍然不起作用?这很奇怪,因为var ic3Application = ic3.startReport(options); setInterval(function () { ic3Application.fireEvent('ic3-table', {}) },20000) 在我这边工作得很好。至于你有 109 行上下文错误和 110 行 ic3Application 错误,我只能猜测你正在使用ic3.startReport(...) 旁边的第一个答案的代码块中的代码,但实际上这不是一个好主意,因为上下文只是可以暂时不可用。
    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2017-07-25
    相关资源
    最近更新 更多