为什么mxgraph中要var that = this 转换后才可以使用that
时间: 2023-09-05 15:11:34 浏览: 160
在 JavaScript 中,函数中的 `this` 关键字指向调用该函数的对象。然而,在某些情况下,函数内部的 `this` 可能会丢失或指向不正确的对象。为了解决这个问题,开发人员经常使用 `var that = this` 或类似的方式来保存正确的 `this` 引用。
在 mxGraph 中,`var that = this` 的目的是将当前对象的引用存储在变量 `that` 中。这样做是为了确保在函数内部可以正确地访问到该对象。由于 JavaScript 中的函数作用域机制,内部函数无法直接访问外部函数的 `this`。通过将 `this` 存储在变量 `that` 中,可以在内部函数中使用 `that` 来访问外部函数的 `this`。
这种技巧通常在回调函数、事件处理程序和闭包等情况下使用,以确保在这些函数内部可以正确地访问到原始对象。这样做可以避免 `this` 引用丢失或指向错误的对象。
相关问题
mxgraph graph.addListener(mxEvent.SIZE, function(sender, evt){ var bounds = graph.getGraphBounds(); var width = bounds.width; var height = bounds.height; // 重新计算边的坐标位置 graph.getModel().beginUpdate(); try { var cells = graph.getModel().getCells(); for (var i = 0; i < cells.length; i++) { var cell = cells[i]; if (graph.getModel().isEdge(cell)) { var geo = graph.getCellGeometry(cell); geo.setTerminalPoint(new mxPoint(geo.getTerminalPoint(true).x * width, geo.getTerminalPoint(true).y * height), true); geo.setTerminalPoint(new mxPoint(geo.getTerminalPoint(false).x * width, geo.getTerminalPoint(false).y * height), false); } } } finally { graph.getModel().endUpdate(); }});此方法报错
这个错误可能是由于 mxPoint 对象未被正确定义导致的。要解决这个问题,你需要检查代码中是否正确引用了 mxGraph 和 mxPoint 类。你可以使用如下代码确认:
```javascript
console.log(mxGraph); // 确认 mxGraph 类是否正确引用
console.log(mxPoint); // 确认 mxPoint 类是否正确引用
```
如果上述代码输出 undefined,则表示相关类没有正确引用。你需要确保正确引用这些类,并在代码中正确实例化这些对象。
另外,还需要注意该方法中的循环遍历每个 cell 并更新其坐标的效率问题。如果 cell 数量很大,可能会导致性能问题。你可以尝试优化代码,例如只遍历需要更新的 cell 等。
mxGraph将Visio文件转换为mxGraph XML格式
mxGraph目前不支持直接将Visio文件转换为mxGraph XML格式。 但是,您可以使用Visio自带的“导出为XML”功能将Visio文件导出为XML格式,然后手动将其转换为mxGraph XML格式。
以下是将Visio文件转换为mxGraph XML格式的一些步骤:
1. 打开Visio文件并选择“文件”>“导出”>“XML文件”。
2. 选择一个目录和文件名,然后单击“保存”。
3. 打开导出的XML文件并查找与您需要的形状相关的XML代码。
4. 将Visio的XML代码转换为mxGraph XML代码。mxGraph XML格式的一些特征包括:
- 根节点是mxGraphModel
- mxCell节点表示图形
- mxGeometry节点表示形状的位置和大小
- mxStyle节点表示形状的样式
5. 将转换后的XML代码复制到您的mxGraph应用程序中,然后加载它以显示图形。
阅读全文