捕获D3库创建的可视化并将状态存储在DB中
Capturing the visualization created by D3 Library and storing the state in DB
我是D3库的新手。该应用程序利用D3库绘制图表。一些更改,如按钮点击、缩放,都是在不影响服务器的情况下进行的。
有没有任何方法可以捕捉状态,将状态存储在数据库中,然后重新创建精确的可视化??
D3图表是可扩展的矢量图形(SVG)。
任何图表的当前状态都可以通过使用d3本身选择SVG来捕获。例如,只需调用:
var allSVGs = d3.selectAll("svg")
这个调用将选择页面上的所有svg元素。然后,您可以对它们进行迭代,并将它们序列化为xml,如下所示:
var serializer = new XMLSerializer();
allSVGs.forEach(function(svgElement) {
var svg = d3.select(svgElement).attr("version", 1.1).attr("xmlns",
"http://www.w3.org/2000/svg").node()
xmlString = xmlString + serializer.serializeToString(svg);
然后,您可以将xml POST到服务器上,并对其执行任何您喜欢的操作,例如将其存储在数据库中。
要重新创建图表,您可以从数据库中读取xml并按原样将其传递给浏览器。我一直在服务器端使用phantomjs(一种无头web浏览器)进行此操作,并且运行良好。
相关文章:
- Ember.js-接口状态应该存储在哪里
- 在 React JS 中,什么时候应该使用存储而不是直接操作视图的状态
- 在 Redux 状态下存储具有原型函数的对象
- React + Flux:将初始状态引入存储
- 存储在HTML5存储中的引导崩溃的当前状态
- 通量:多个容器具有相同的存储,不同的状态
- 在 Javascript 中存储对象的当前状态的最佳实践是什么?
- 当存储状态更改时,React 组件不会更新
- 如何重置 Redux 存储的状态
- 使用会话存储复选框的状态
- 将对象存储在 React 组件的状态中
- 如何对 Flux 存储中的状态变量强制执行隐私
- Dispatch(action)会更改存储状态,但组件不会更新
- 为什么不将redux存储状态存储在本地组件状态中呢?
- 如何在同一个react组件中使用本地状态和redux存储状态?
- 存储状态信息的地方
- 当Vuex存储状态发生变化时,如何更新Vue组件属性
- 角度方式'将存储状态添加到应用程序
- Reactjs redux在页面刷新时存储状态.componentWillUnmount不工作
- 存储状态中的每个对象是否都是不可变的