我有节点标签映射到节点“name”属性,我需要在更改名称时在cy画布上更新标签。我一直在使用这种风格
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()非常简单地删除节点的节点标签。删除临时类时,将呈现正确的标签。 E.g。
在init
上设置的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以下工作
答案 0 :(得分:2)
请关注此票:https://github.com/cytoscape/cytoscape.js/issues/678
从机票:
这可能是由于2.3的样式性能增强。现在,不是累积地应用样式,而是完成匹配选择器上下文的高性能差异。并且仅应用作为diff的结果需要应用的属性。我怀疑因为匹配的上下文相同等,所以样式不会更新。
答案 1 :(得分: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'-property
希望这会有所帮助
答案 2 :(得分:1)
这是在2.5.0版本中添加的,请参阅此票证:https://github.com/cytoscape/cytoscape.js/issues/1041
要使用它,请设置-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
,并在文本周围留出额外空间,使用'width': 'label'
属性,例如padding
5个像素。