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は:回避策として、私はこのような2つのスタイルファイルをマージ:
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