我想在Cytoscape.js 3.1图表中将样式与颜色方案分开。根据{{3}},我初始化然后添加到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
});
}
答案 0 :(得分:2)
合并json而不是附加到样式表。你可以用json做任何你想做的事情,而cy.style()
只能以特定的方式进行修改以防止出现问题。
cy.style().fromJson( sheetA.concat( sheetB ) )