0
我想在Cytoscape.js 3.1圖形中將風格與配色方案分開。據http://js.cytoscape.org/#cy.style,我初始化,然後添加到cy.style()
:Cytoscape.js cy.style()。fromJson()添加而不是替換?
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
});
}
答案是修正的 – maxkfranz