私は、ページ上に完全にまたは個別に存在できる複数のコンポーネントで構成された、より大きな Web アプリに取り組んでいます。親の AppView 要素は、イベントの委任のために存在する必要があります。
イベント委任の設定方法は次のとおりです。
//inside controlsView.js
appView.view.trigger('eventOccured');
...
//later on in controlsView.js
$(document).on('eventOccured', appView.view, function(){
controlsView.doSomething();
});
//inside ChartView.js
$(document).on('eventOccured', appView.view, function(){
chartView.doSomething();
});
appView、controlsView、および chartView は個別の .js ファイルですが、グローバルな appView 変数を使用しても、他の .js ファイルはトリガーされたイベントを検出しません。appView.view (アプリが内部にある親 HTML 要素の jQuery オブジェクト) でカスタム イベントをトリガー/検出しようとしている方法に問題がありますか?
実際のコード例は次のとおりです。
//*************** controlsView.js
$(document).ready(function() {
var controlsView = {
initialize: function(){
var self = this;
console.log('hi');
}
}
$(document).on('loadControls', appView.view, function(){
console.log('hi');
controlsView.initialize();
});
});
//*************** appView.js
$(document).ready(function() {
appView = {
initialize: function(){
appView.view = $('#interactiveChartContainer');
if ($('#graphControls').length){
appView.view.trigger('loadControls');
}
}
}
//if the containing element is missing, don't bother loading the rest of the app
if (!($('#interactiveChartContainer').length)){
return;
} else {
//only run this app if the right element exists on the page.
appView.initialize();
}
});