events - 为什么我第一次无法更改 mxEvent.CHANGE 事件中的样式?

标签 events mxgraph

我只想在 CHANGE 事件触发时更改某些样式。但是当我通过插入或移动顶点或边更改模型时,样式没有更改。当我再次更改任何内容后,更改后的顶点将更改其样式。有人知道为什么吗?

这是我的代码:

graph.getModel().addListener(mxEvent.CHANGE, function(sender, evt){
        if(graphInited){
            graph.getModel().beginUpdate();
            try {
                  var changes = evt.getProperty('edit').changes;
                  for (var i = 0; i < changes.length; i++) {
                      var change = changes[i];
                      var state = graph.view.getState(change.cell);
                      if(state!=null){//color #1C86EE means new insert
                          if(state.style[mxConstants.STYLE_IMAGE_BACKGROUND]!="#1C86EE" 
                          && state.style[mxConstants.STYLE_STROKECOLOR]!="#1C86EE" 
                          && state.style[mxConstants.STYLE_FONTCOLOR]!="#1C86EE"){
                              graph.setCellStyles(mxConstants.STYLE_IMAGE_BACKGROUND, '#68228B', [change.cell]);
                              graph.setCellStyles(mxConstants.STYLE_STROKECOLOR, '#68228B', [change.cell]);
                          }
                      }
                  }
            } finally {
                graph.getModel().endUpdate();
            }
        }
    });

最佳答案

与我的第一个答案相比,我做了更多的侦察和喜欢更简单的解决方案。

您需要添加:

  1. evt.consume()
  2. graph.refresh()

所以最终代码如下所示:

graph.getModel().addListener(mxEvent.CHANGE, function(sender, evt){
    if(graphInited){
        graph.getModel().beginUpdate();
        evt.consume();
        try {
                var changes = evt.getProperty('edit').changes;
                for (var i = 0; i < changes.length; i++) {
                    var change = changes[i];
                    var state = graph.view.getState(change.cell);
                    if(state!=null){//color #1C86EE means new insert
                        if(state.style[mxConstants.STYLE_IMAGE_BACKGROUND]!="#1C86EE" 
                        && state.style[mxConstants.STYLE_STROKECOLOR]!="#1C86EE" 
                        && state.style[mxConstants.STYLE_FONTCOLOR]!="#1C86EE"){
                            graph.setCellStyles(mxConstants.STYLE_IMAGE_BACKGROUND, '#68228B', [change.cell]);
                            graph.setCellStyles(mxConstants.STYLE_STROKECOLOR, '#68228B', [change.cell]);
                        }
                    }
                }
        } finally {
            graph.getModel().endUpdate();
            graph.refresh();
        }
    }
});

关于events - 为什么我第一次无法更改 mxEvent.CHANGE 事件中的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710915/

相关文章:

c# - Datagridview cellcontent 单击事件无法正常工作

javascript - Bootstrap 模式委托(delegate)事件类型语法

events - Blazor 组件 : How to communicate from grandchild to child to parent or grandchild to parent

mxgraph - 使用 mxCellRenderer 将 draw.io 中的 XML 渲染为图像

javascript - 如何在 mxGraph 中使用曲线边缘样式

javascript - 如何使用 mxGraph 获取 SVG 元素的 ID

javascript - graph.addCell 和 graph.insertVertex 之间的主要区别是什么?

xml - mxGraph:加载 XML 文件

angularjs - 在 $scope.$digest 之后立即触发事件

python - Tkinter tkMessageBox 禁用 Tkinter 键绑定(bind)