0

ビューをレンダリングするときにイベントリスナーが適切に追加される理由はわかりませんが、別のイベント関数内に追加しようとすると、未定義でエラーがスローされます。イベントを適切に追加するにはどうすればよいですか?

回避策はマウスが押されているかどうかを格納する変数を追加することですが、イベントリスナーを追加および削除するだけで見た目がすっきりする気がします。また、混乱の別の変数の必要性を否定します。

コード:

render: function() {
        //sets up a new Easeljs stage called context
        Canvas.context.addEventListener("stagemousedown", this.handleMouseDown);
        Canvas.context.addEventListener("stagemouseup", this.handleMouseUp);
    },

    handleMouseDown: function() {
        console.log('down');
        Canvas.context.addEventListener("stagemousemove", this.handleMouseMove);
    },

    handleMouseMove: function() {
        console.log('moving');
    },

    handleMouseUp: function() {
        console.log('up');
        Canvas.context.removeEventListener("stagemousemove", this.handleMouseMove);
    }

エラー:

Uncaught TypeError: Cannot read property 'handleEvent' of undefined (09:32:29:386 | error, javascript)
at b.dispatchEvent (public_html/js/libs/easeljs-0.6.1.min.js:14:447)
at b._handlePointerMove (public_html/js/libs/easeljs-0.6.1.min.js:88:490)
at b._handleMouseMove (public_html/js/libs/easeljs-0.6.1.min.js:88:69)
at c.mousemove.f (public_html/js/libs/easeljs-0.6.1.min.js:87:34)
4

1 に答える 1

1

あなたはそうする必要があり_.bindAll(this)ますinitialize

initialize: function () {_.bindAll(this);}

おそらく、イベント バインディング コードを初期化するように移動する必要があります。これは、インスタンスごとに 1 回だけ呼び出されるのに対し、render繰り返し呼び出される可能性があるため、イベント ハンドラー バインディングが重複する可能性があるためです。

于 2013-06-21T01:49:00.750 に答える