繁体   English   中英

如何避免在数据更改时完全刷新小部件?

[英]How to avoid a full refresh of a widget on data change?

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

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

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

是否缺少init widget事件,在该事件中我们可以初始化部件和变量? 那么on Data ReceivedAfter render事件将仅用于管理数据操作和渲染? (关于这些变量)或者……我只是在以错误的方式进行操作?

每次调用Render Event后,我们都会获取新数据或小部件的属性之一已更改。 最新的是很少见的,但是如果某些属性是使用事件定义的,则可能是最新的。

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

第一个通过jquery很简单,如果不需要缓存javascript对象,则应使用第一个。 对于第二个,我们有两个解决方案:

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

  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()

您可以在此处查看一个有效的示例:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM