2017-06-14 68 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:作爲一種變通方法,我合併兩個樣式文件是這樣的:

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()只能以特定的方式修改以防止出現問題。

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

+0

答案是修正的 – maxkfranz

相關問題