[英]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 Received
和After 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.