Vis.js网络:如何提取节点(和边缘)的自定义选项?

时间:2017-11-13 23:08:34

标签: javascript vis.js vis.js-network

我正在使用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好吧,透过the whole list of methods告诉我,很可能没有这个任务的真正帮助者(除了可能是getOptionsFromConfigurator,如果它没有配置器工作,但似乎它只告诉全局选项,不是那些节点或边缘)。所以我将检查getOptionsFromConfigurator,然后继续搜索要迭代和比较的属性。 network.body.nodes[id].nodeOptionsnetwork.body.edges[id].edgeOptions看起来很有希望。另一件需要注意的事情是使用vis.DataSet(我应该尝试访问nodes创建的new vis.DataSet(nodes)并查看它们是否获得默认选项和自定义选项。

0 个答案:

没有答案