4

我正在使用 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
    })
}

如您所见,我手动提取了这些属性(idlabelxy)并storedNodes为每个节点(或边缘)设置了 。我需要保存也更改的属性——只有那些非默认(自定义)的。就像如果某个边缘有一个arrows集合,"to"我想保存它(但不是arrows:false每个边缘);或者如果一个节点具有自定义的形状或颜色,我想保存它而不保存每个节点的所有颜色、形状、字体大小等。

所以,我的问题是:如何获取节点的自定义属性?有什么帮手吗?还是我必须迭代和比较几棵树(默认选项和实际选项)?有什么建议么?

PS 好的,查看整个方法列表告诉我,很可能没有真正的帮助者来完成这项任务(除非getOptionsFromConfigurator它在没有配置器的情况下工作,但它似乎只告诉全局选项,而不是节点或边的选项)。因此,我将检查getOptionsFromConfigurator然后转到搜索要迭代和比较的属性。network.body.nodes[id].nodeOptions看起来network.body.edges[id].edgeOptions很有希望。另一件事是使用vis.DataSet(我应该尝试访问nodescreated asnew vis.DataSet(nodes)并查看它们是否获得默认选项和自定义选项)。

4

0 回答 0