1

在 icCube Reporting V6 中,我基于https://www.iccube.com/your-first-html-widget/上的 iccube 示例创建了一个模板小部件。这样做,我把所有的 JS 代码都放在了After render事件中。

我想在小部件创建时定义和默认一些变量,这些变量可以在使用整个报告期间更改,并用作此小部件中的参数。

问题是,在每次数据更改时,小部件都会完全刷新和重建,也将我的变量重置为默认值......

它是否缺少init widget我们可以初始化小部件和变量的事件?那么on Data ReceivedandAfter render事件将只是旨在管理数据操作和渲染?(关于这些变量)或者……我只是做错了吗?

4

1 回答 1

2

每次我们获得新数据或小部件的属性之一发生变化时都会调用渲染事件。最新的很少见,但如果某些属性已使用事件定义,则可能。

我们需要在这个方法上添加一个状态来检查小部件是否已经被渲染。这可以通过两种方式完成,使用 jquery 检查 dom 是否已更改或添加 javascript 对象。

第一个使用 jquery 很容易,如果不需要缓存 javascript 对象,应该使用它。对于第二个,我们有两个解决方案:

1)我们可以使用 jquery 将 javascript 对象绑定到 html 元素(数据):

  var state = $node.data("widgetState");
    if ( state ) {
        // it's not the first time
        state.times = state.times+1;
        $node.html("It's the " + state.times + " time you clicked " );
    }
    else
    {
        // it's the first time
        $node.html("It's the first time you clicked, don't be shy" );
        state = { times : 1 } ;
        $node.data("widgetState", state);
    }    

2)从icCube 6.0.4开始你也可以使用上下文来获取本地状态对象,context.widgetState()

您可以在此处查看一个工作示例:

于 2017-02-17T14:30:02.897 回答