cytoscape.js中的动态节点内容(标签)

时间:2014-09-30 14:35:02

标签: javascript cytoscape.js cytoscape-web

我有节点标签映射到节点“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以下工作

3 个答案:

答案 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个像素。