this.chart
他の回答は必要なことを達成しますが、ビューオブジェクト( )をそのビューのロジック()から最終的に分離しないため、最も効率的な(スケーラブルな)方法では機能しませんfireEvent()
。MVCアプリケーションでは、これらのビューの「決定」はコントローラーに存在します。コントローラはビューを「制御」し、ビューがアクセスできるすべてのAPIを含む必要があります。
あなたの例でthis
は、はコントローラーであり、それは問題ありません(つまり、リスナーを適切な場所に追加しているということです)。あなたが本当にする必要があるのは、「処理」を行うべきもののスコープにハンドラーをバインドすることです-あなたの場合this
::
// `this` is the controller of `chart`
this.chart.addEventListener('create', function() {
this.fireEvent('created');
}.bind(this));
このページの他の回答は、ビューが独自のコントローラーになるように作成されていますが、を使用して「コントローラー」に一時的な参照を割り当てることにより、「作成」イベントを処理している間のみvar self = this
です。繰り返しになりますが、これは問題なく機能しますが、イベント駆動型アプリケーションでは大規模にうまく機能せず、処理するイベントがたくさんある場合は実際には意味がありません。
.bind()
ECMAScript5の実装です。さらに古いブラウザで動作する必要がある場合は、ここでそのための適切な方法を説明します(functions
およびを使用.call()
):https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind