在icCube Reporting V6中,我基于iccube在https://www.iccube.com/your-first-html-widget/的示例创建了一个模板小部件。这样做,我已将所有JS代码放在After render
事件中。
我希望在小部件创建时定义一些变量并默认,这些变量可以在整个报告的使用过程中更改,并在此小部件中用作参数。
问题是,在每次数据更改时,窗口小部件都会被完全刷新和重建,将我的变量重置为默认值...
是否缺少init widget
事件,我们可以在其中初始化窗口小部件和变量?然后on Data Received
和After render
事件的目的是管理数据操作和渲染? (关于这些变量)
或者......我只是做错了吗?
答案 0 :(得分:2)
每次获取新数据或者窗口小部件的某个属性发生更改时,都会调用渲染事件。最新版本很少见,但如果使用事件定义了某些属性,则可能是最新的。
我们需要的是在此方法上添加状态以检查窗口小部件是否已经呈现。这可以通过两种方式完成,使用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()
您可以查看一个有效的示例here: