2017-06-14 26 views
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は:回避策として、私はこのような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 
    }); 
} 

答えて

2

はJSONではなく、スタイルシートに追加をマージします。 は、問題を回避するための特定の方法でのみ変更することができますが、あなたはjsonで何でもできます。

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

+0

回答が修正されました – maxkfranz

関連する問題