Javascript 在Spotfire Mods中,我能否确定作为阅读器一部分的dataview中发生了哪些更改?

Javascript 在Spotfire Mods中,我能否确定作为阅读器一部分的dataview中发生了哪些更改?,javascript,d3.js,spotfire,Javascript,D3.js,Spotfire,我能够成功地监控数据视图的整体变化,以及Spotfire中D3网络图模块的任何模块属性。它工作得非常好 但是,在D3网络图中,模拟正在运行,您只希望在实际呈现的数据发生更改时重新启动此模拟,是否有方法在dataView对象中检查更详细的更改。例如,如果按颜色或按列大小更改轴表达式,我不需要重新运行网络模拟,只需更新节点的颜色或大小,甚至在对网络图表应用某些标记时(这也会影响dataView)。但是,如果数据列发生更改,我希望网络重新运行模拟 另一个示例用例是,如果应用了过滤,我们可能只希望在过滤

我能够成功地监控数据视图的整体变化,以及Spotfire中D3网络图模块的任何模块属性。它工作得非常好

但是,在D3网络图中,模拟正在运行,您只希望在实际呈现的数据发生更改时重新启动此模拟,是否有方法在dataView对象中检查更详细的更改。例如,如果按颜色或按列大小更改轴表达式,我不需要重新运行网络模拟,只需更新节点的颜色或大小,甚至在对网络图表应用某些标记时(这也会影响dataView)。但是,如果数据列发生更改,我希望网络重新运行模拟

另一个示例用例是,如果应用了过滤,我们可能只希望在过滤掉大量数据的情况下更新网络

API中是否有任何方法可以用来检查传递给reader的DataView中的这些更详细的更改

我的读者是这样的:

/**
*创建read函数。
*/
常量读卡器=带有更改检查器的读卡器(
mod.createReader(
mod.visualization.data(),
mod.windowSize(),
mod.property(“网络强度”),
mod.属性(“显示标签”),
mod.属性(“网络类型”),
mod.属性(“应用颜色”)
)
);
我在异步呈现函数中有一个updateNetwork函数,它订阅阅读器。然后,我将进行一些简单的逻辑检查,这些检查将传递给updateNetwork图表函数:

//检查发生了什么变化
let data_requires_update=false;
let simulation_requires_update=false;
let window_requires_update=false;
let rendering_requires_update=false;
if(reader.hasValueChanged(dataView)){
数据需要更新=真;
模拟需要更新=真;
}
如果(
reader.hasValueChanged(网络强度)||
reader.hasValueChanged(网络类型)
) {
模拟需要更新=真;
}
if(reader.hasValueChanged(windowSize)){
窗口需要更新=true;
}
如果(
reader.hasValueChanged(显示标签)||
reader.hasValueChanged(应用颜色)
) {
渲染需要更新=真;
}
//触发加载网络
更新网络(
数据需要更新,
模拟需要更新,
窗口需要更新,
渲染需要更新
);

因此,我希望为dataView检查添加更多细节,以便能够检测轴的更改、主数据表的更改以及是否发生了过滤。这可能吗?

由于许多不同的原因,Spotfire Mods中的数据视图可能会失效并被替换;新的axis表达式、更改的数据表、更改的标记或筛选、新的流数据或刷新/替换的数据表,甚至修改的文档属性(如果在axis表达式中使用)

因此,并非总是能够获得关于这些因素导致计算新数据视图的详细信息,但您可以订阅轴表达式中的更改,从而至少在用户更改任何重要轴表达式时强制刷新模拟

在您的情况下,添加除ColorBy和SizeBy之外的所有轴可能会使您更接近您的目标。如果您获得了一个新的dataview,但没有新的轴,那么您可以尝试更新可视化,而不用使用d3刷新模拟。例如,如果更改仅为标记、颜色或尺寸,则不需要新的模拟过程。为了在可视化中识别节点和连接,应该使用层次叶节点的属性

如果新数据视图的原因是过滤或新数据(流或刷新的数据表),那么您将拥有一组d3 enter/exit DOM元素。如果这些集合相对较小,则不刷新模拟是否可以

但也要记住,即使轴表达式不变,定义连接强度的度量也可能有新的值。因此,可能很难确定更新是否正常。手动刷新模拟按钮可能是最简单的方法,除非您想比较整个数据视图,以确定是更新还是完全刷新它

结论是,确定是更新当前可视化还是重新运行整个布局过程所需的大多数信息都可以通过API获得,但要制作一个响应良好的模型,需要了解可视化的内容