Javascript 如何避免在数据更改时完全刷新小部件?
在iCube Reporting V6中,我基于iCube的示例创建了一个模板小部件。因此,我将所有JS代码都放在渲染后的Javascript 如何避免在数据更改时完全刷新小部件?,javascript,widget,iccube-reporting,Javascript,Widget,Iccube Reporting,在iCube Reporting V6中,我基于iCube的示例创建了一个模板小部件。因此,我将所有JS代码都放在渲染后的事件中 我希望在小部件创建时定义和默认一些变量,这些变量可以在整个报告的使用过程中更改,并用作此小部件中的参数 问题是,每次数据更改时,小部件都会被完全刷新和重建,并将我的变量重置为默认值 它是否缺少可以初始化小部件和变量的initwidget事件?那么,接收到的数据上的和渲染后的事件将仅用于管理数据操作和渲染?(关于这些变量) 或者…我只是做得不对吗?每次我们获得新数据或小
事件中
我希望在小部件创建时定义和默认一些变量,这些变量可以在整个报告的使用过程中更改,并用作此小部件中的参数
问题是,每次数据更改时,小部件都会被完全刷新和重建,并将我的变量重置为默认值
它是否缺少可以初始化小部件和变量的initwidget
事件?那么,接收到的数据上的和渲染后的事件将仅用于管理数据操作和渲染?(关于这些变量)
或者…我只是做得不对吗?每次我们获得新数据或小部件的某个属性发生更改时,都会调用Render事件。最新的是罕见的,但如果某些属性是使用事件定义的,则可能是最新的
我们需要的是在此方法上添加一个状态,以检查小部件是否已经呈现。这可以通过两种方式完成,使用jquery检查dom是否已更改或添加javascript对象
第一种方法很容易使用jquery,如果不需要缓存javascript对象,应该使用它。对于第二个问题,我们有两种解决方案:
1) 我们可以使用jquery将javascript对象绑定到html元素():
2) 由于icCube 6.0.4,您还可以使用上下文获取本地状态对象context.widgetState()
您可以检查一个工作示例:
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);
}