6

我将节点标签映射到节点“名称”属性,并且当名称更改时,我需要在 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() 来非常简单地删除节点的节点标签。当临时类被移除时,会呈现正确的标签。例如

在 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 版以下工作

4

3 回答 3

2

请关注这张票:https ://github.com/cytoscape/cytoscape.js/issues/678

从票:

这可能是由于 2.3 样式的性能增强。现在,不是累积应用样式,而是匹配选择器上下文的高性能差异。并且仅应用由于差异而需要应用的属性。我怀疑因为匹配的上下文是相同的等等,所以样式没有更新。

于 2014-10-01T15:50:50.693 回答
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 样式声明初始化“内容”属性

希望这可以帮助

于 2016-01-07T15:46:42.787 回答
1

这是在 2.5.0 版中添加的,请参见这张票: https ://github.com/cytoscape/cytoscape.js/issues/1041

要使用它,请设置'width': 'label',并使用该padding属性在文本周围获得额外空间,例如'padding': 55 像素。

于 2017-01-26T19:42:06.140 回答