2014-09-30 53 views
4

我將節點標籤映射到節點「name」屬性,並且當名稱更改時,我需要在cy畫布上更新標籤。我一直在使用的樣式cytoscape.js中的動態節點內容(標籤)

style: cytoscape.stylesheet() 
.selector('node') 
    .css({ 
    'color': '#000000', 
    'content': 'data(name)', 
    'text-valign': 'center', 
    'background-color': '#FFFFFF', 
    'border-width': 1, 
    'border-color': '#707070' 
    }) 

和節點

cy.add(
    { group: "nodes", data: { id: "n0", name: 'name' }, position: { x: 100, y: 100 } } 
); 

和更新與

cy.$('#n0').data('name', 'newName') 

使用2.2.10的節點,該節點的標籤(內容)更新畫布如預期。從升級到版本2.3.1以後,這不再起作用。任何有關如何實現這一目標的建議將不勝感激!

編輯 我不知道爲什麼不起作用,但對於其他人有這個問題,暫時我使用eles.flashClass(),以很簡單的刪除了該節點的標籤我節點。當臨時類被刪除時,正確的標籤被渲染。例如。

在初始化設置的CSS樣式

.selector('node.nolabel') 
    .css({ 
     'content': '' 
}) 

然後重命名節點

cy.$('#n0').data('name', 'newName').flashClass('nolabel',1) //class applied for 1ms then removed 

這工作,但它似乎並不像它應該是必要的,我真的很想知道爲什麼

content: 'data(name)' 

不工作 - 我不知道這是一個錯誤還是我做錯了什麼,只是它的工作原理以下版本2.3.0

回答

1

請點擊此票:https://github.com/cytoscape/cytoscape.js/issues/678

從售票:

這可能是由於款式的性能提升2.3。現在,不是累積應用樣式,而是完成匹配選擇器上下文的高性能差異。並且僅應用由於diff而應用的屬性。我懷疑這是因爲匹配的上下文是相同的,風格不更新。

+0

太好了,謝謝!在我知道我不是錯誤地使用最新版本之前,不想公開問題。 – dbean 2014-10-03 13:01:54

1

我真的不知道我的解決方案的質量,如果是你要找的,但我沒有我沒有這個(版本> = 2.5)

cy.nodes([filter]).on('eventname').css({content:[newLabelvalue]}) 
example: 
var node = cy.$([selector]); 
node.on('grab', function() { 
      var field = $("input[id="+ nodeId + "]"); 
      this.css({content: field.val()}); 
      field.hide(); 
     }); 

在Cytoscape的風格聲明的init「content'屬性

希望這有助於

+0

感謝您的評論。僅供參考,我的問題已在[鏈接](https://github.com/cytoscape/cytoscape.js/issues/678)鏈接的快照生成中得到解決,自節點內容映射到「數據(名稱)」之後一直運行。 – dbean 2016-01-12 10:34:41