我正在使用 vis.js/network 开发一个简单的图形编辑器。由于编辑器必须存储网络状态,我有一个保存助手,我从网络中提取数据并将其存储为 JSON。
目前,我使用看似相当丑陋/骇人听闻的方式来提取数据进行存储:
// get nodes and edges
var nodes = network.body.data.nodes._data; // brief ones; network.body.nodes contain much more stuff (x,y, default stuff)
//# look for a suitable getter
var edges = network.body.data.edges._data;
// network.body.data.edges._data is a hash of { id: , from: , to: }
// get node positions
var positions = network.getPositions(),
nodeIds = Object.keys(nodes);
var storedEdges = [], storedNodes = [];
for(var edgeId in edges)
storedEdges.push({ from: edges[edgeId].from, to: edges[edgeId].to });
for(var nodeId in nodes) {
storedNodes.push({
id: nodes[nodeId].id, label: nodes[nodeId].label,
x: positions[nodeId].x, y: positions[nodeId].y
})
}
如您所见,我手动提取了这些属性(id
、label
、x
、y
)并storedNodes
为每个节点(或边缘)设置了 。我需要保存也更改的属性——只有那些非默认(自定义)的。就像如果某个边缘有一个arrows
集合,"to"
我想保存它(但不是arrows:false
每个边缘);或者如果一个节点具有自定义的形状或颜色,我想保存它而不保存每个节点的所有颜色、形状、字体大小等。
所以,我的问题是:如何获取节点的自定义属性?有什么帮手吗?还是我必须迭代和比较几棵树(默认选项和实际选项)?有什么建议么?
PS 好的,查看整个方法列表告诉我,很可能没有真正的帮助者来完成这项任务(除非getOptionsFromConfigurator
它在没有配置器的情况下工作,但它似乎只告诉全局选项,而不是节点或边的选项)。因此,我将检查getOptionsFromConfigurator
然后转到搜索要迭代和比较的属性。network.body.nodes[id].nodeOptions
看起来network.body.edges[id].edgeOptions
很有希望。另一件事是使用vis.DataSet
(我应该尝试访问nodes
created asnew vis.DataSet(nodes)
并查看它们是否获得默认选项和自定义选项)。