【问题标题】:CellView.highlight() breaking change?CellView.highlight() 重大变化?
【发布时间】:2016-07-13 21:18:50
【问题描述】:

我的应用程序使用 Jointjs。

我最近从 Jointjs v0.9.7 升级到 v0.9.10,因为我这样做了,所以单元格突出显示似乎不起作用。我将所有内容简化为一个测试应用程序,我可以看到 highlight() 函数被调用但 highlighted 类未设置。

我将简化的测试页面放入a gista fiddle。如果有帮助,也将其复制在下面。

是否发生了重大变化?突出显示在 v0.9.10 中应该如何工作?

<html>
<head>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jointjs/0.9.10/joint.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jointjs/0.9.10/joint.core.css" />
</head>

<body>
    <div id="paper" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jointjs/0.9.10/joint.js"></script>
    <script>
        //there is a problem with jointjs in the latest version of Chrome. This fixes it
        SVGElement.prototype.getTransformToElement =
            SVGElement.prototype.getTransformToElement || function (toElement) {
                return toElement.getScreenCTM().inverse().multiply(this.getScreenCTM());
            };

        var highlighted = false;

        var graph = new joint.dia.Graph;
        var paper = new joint.dia.Paper({
            el: $('#paper'),
            width: 400,
            height: 400,
            model: graph,
            gridSize: 1,
            interactive: false
        });

        paper.on('cell:pointerclick', function (cellView) {

            if (highlighted) {
                cellView.unhighlight();
            } else {
                cellView.highlight();
            }

            highlighted = !highlighted
        });

        var element = new joint.shapes.basic.Rect({
            position: { x: 100, y: 30 },
            attrs: { text: { text: 'my shape' } },
            size: { height: 92.7051, width: 150 }
        });

        graph.addCell(element);
    </script>
</body>

</html>

【问题讨论】:

    标签: javascript jointjs


    【解决方案1】:

    JointJS v0.9.10 中的默认荧光笔已更改。当您突出显示一个元素时 - 具有模拟元素形状的 joint-highlight-stroke 类名称的 SVGPathElement 将直接附加到 ElementView。这解决了具有 CSS 属性 outline 的浏览器之间的差异,大多数情况下 SVG 元素不支持。

    可用的highlighters 位于joint.highlighters 命名空间中(stroke 默认opacityaddClass为了向后兼容)。

    为了恢复原来的行为,请使用以下。

    // a highlighter definition
    var myHighlighter = {
        name: 'addClass',
        options: {
            className: 'highlighted'
        }
    }
    
    // add `myHighlighter` to an `el` (`null` for the entire cellView) DOM element.
    cellView.highlight(el, myHighlighter);
    // remove `myHighlighter` from an `el` DOM element.
    cellView.unhighlight(el, myHighlighter);
    

    请注意,新更改允许使用多个荧光笔突出显示单元视图。

    Demo

    很抱歉给您带来不便。荧光笔的实际文档将尽快出现在 JointJS 存储库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2011-09-27
      • 2021-08-01
      • 2011-02-02
      • 2015-01-03
      相关资源
      最近更新 更多