4

JointJS サイトの Hello World の例を試すと、常にこの例外が表示されます。

Uncaught TypeError: Cannot call method 'getStrokeBBox' of undefined

コードは次のとおりです。

<!DOCTYPE html>
<html>
<head>
<!--
<link rel="stylesheet" href="css/joint.css" />
<script src="js/joint.js"></script>
-->


<link rel="stylesheet" type="text/css" href="http://www.jointjs.com/downloads/joint.css"></link>
<script type="text/javascript" src="http://www.jointjs.com/downloads/joint.js" ></script>


<script>
    var graph = new joint.dia.Graph;

    var paper = new joint.dia.Paper({
        el: $('#myholder'),
        width: 600,
        height: 200,
        model: graph
    });

    var rect = new joint.shapes.basic.Rect({
        position: { x: 100, y: 30 },
        size: { width: 100, height: 30 },
        attrs: { rect: { fill: 'blue' }, text: { text: 'my box', fill: 'white' } }
    });

    var rect2 = rect.clone();
    rect2.translate(300);

    var link = new joint.dia.Link({
        source: { id: rect.id },
        target: { id: rect2.id }
    });

    graph.addCells([rect, rect2, link]);
</script>
</head>
<title>Test</title>

<body>
    <div id="myholder"> </div>
</body>
</html>

同じ問題について既にここで尋ねられた別の質問があることがわかりましたが、紙オブジェクトの div 要素が既にあるため、そこに示されている解決策は関係ありません。

4

3 に答える 3

8
el: $('#myholder'),

ブラウザは上から下に読みます。ブラウザは、id の要素を見つける前にこの行を実行しているmyholderためel、空の jQuery オブジェクトです。

代わりに、スクリプト タグを HTML の一番下に移動するか (ユーザーが取得する前にブラウザーが検出できるようにします)、すべてを呼び出しmyholderでラップします。$(document).ready(

于 2014-02-17T19:30:10.953 に答える
1

まだ作成されていない要素を取得しようとしています。スクリプトを最後に配置する<body>か、使用します$(document).ready();

于 2014-02-17T19:31:16.213 に答える
1

あなたはいいえjQueryを使用するので、これは機能します:

window.onload = function () {   your entire javascript code here };

ただし、jQuery.js も含めて使用することをお勧めします。

$(function () {  your entire javascript code here  });

コードは行ごとに実行されるため、最初に JavaScript をロードして実行し、「myholder」が何であるかを認識しません。上記で説明したように実行すると、javascript が読み込まれますが、ページ全体が読み込まれた後にのみ実行されます。

于 2014-02-17T19:38:23.407 に答える