mxGraph的setAttribute方法给cell添加上class属性但是在画布渲染时候会被重置怎么解决
时间: 2024-03-20 21:40:41 浏览: 99
mxGraph在渲染时会根据cell的style来设置节点的样式,因此在setAttribute方法中设置的class属性会在渲染时被重置。如果需要在渲染时保留设置的class属性,可以通过修改cell的style来实现。具体来说,可以在setAttribute方法中将class属性添加到cell的style中,示例代码如下:
```
var graph = new mxGraph(container);
var style = graph.getStylesheet().getDefaultVertexStyle();
style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
var parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try {
var vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 30);
var cell = vertex.cell;
var state = graph.view.getState(cell);
var newStyle = state.style + ';class=my-class';
graph.getModel().setStyle(cell, newStyle);
} finally {
graph.getModel().endUpdate();
}
```
在这个示例中,我们通过getModel方法获取了cell的模型,并使用setStyle方法将class属性添加到了cell的style中。现在,当mxGraph渲染节点时,它会将cell的style设置为节点的样式,因此设置的class属性会保留下来。
需要注意的是,如果cell的style中已经存在class属性,那么我们需要先将它从style中移除,再添加新的class属性。可以使用mxUtils.removeFromNode方法将属性从style中移除,示例代码如下:
```
var graph = new mxGraph(container);
var style = graph.getStylesheet().getDefaultVertexStyle();
style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
var parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try {
var vertex = graph.insertVertex(parent, null, 'Hello, World!', 20, 20, 80, 30);
var cell = vertex.cell;
var state = graph.view.getState(cell);
var newStyle = mxUtils.setStyle(state.style, 'class', 'my-class');
graph.getModel().setStyle(cell, newStyle);
} finally {
graph.getModel().endUpdate();
}
```
在这个示例中,我们使用mxUtils.setStyle方法将class属性添加到cell的style中。如果style中已经存在class属性,该方法会先将它从style中移除,然后再添加新的class属性。
阅读全文