gpt4 book ai didi

css - Cytoscape.js cy.style().fromJson() 添加而不是替换?

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:59 25 4
gpt4 key购买 nike

我想在 Cytoscape.js 3.1 图表中将样式与配色方案分开。根据http://js.cytoscape.org/#cy.style ,我初始化然后添加到 cy.style():

var mystyle = [
{
"selector": "node",
"css":
{
"border-opacity": 1.0,
'label': function(ele)
{
if(ele.data('Labels_EN')) {return ele.data('Labels_EN')[0];}
...
}, ...
];

var bright = [
{
"selector": "node",
"css":
{"background-color": "white";}
}];

cy = cytoscape(
{
container: mycontainer,
style: mystyle
});

cy.style().fromJson(bright).update();

不幸的是,对 cy.style().fromJson() 的调用似乎会自动调用 cy.style().resetToDefault(),因为它删除了现有的风格。如何防止 Cytoscape.js 删除我现有的样式,而是使用 JSON 添加到它?我需要此功能,这样我就不必将完整的样式信息放入我的所有配色方案文件中,这会增加维护难度。

P.S.:作为解决方法,我合并了两个样式文件,如下所示:

function mergeJsonArraysByKey(a1,a2)
{
let map1 = new Map();
let map2 = new Map();
for(i=0;i<a1.length;i++) {if(a1[i].selector) {map1.set(a1[i].selector,a1[i]);}}
for(i=0;i<a2.length;i++) {if(a2[i].selector) {map2.set(a2[i].selector,a2[i]);}}
let merged = [];
map1.forEach((value,key,map) =>
{
if(map2.has(key))
{
merged.push($.extend(true,{},value,map2.get(key)));
} else
{
merged.push(value);
}
});
map2.forEach((value,key,map) =>
{
if(!map1.has(key))
{
merged.push(value);
}
});
return merged;
}

function initGraph(container, graph)
{
let merged = mergeJsonArraysByKey(mystyle,bright);
cy = cytoscape(
{
container: container,
style: merged
});
}

最佳答案

合并 json 而不是附加到样式表。您可以使用 json 做任何您想做的事情,而 cy.style() 只能以特定方式进行修改以防止出现问题。

cy.style().fromJson( sheetA.concat( sheetB ) )

关于css - Cytoscape.js cy.style().fromJson() 添加而不是替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44548619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com