跨多个jQuery脚本的变量/事件

时间:2013-10-15 17:45:49

标签: javascript web-applications jquery

我正在开发一个更大的网络应用程序,由多个组件组成,这些组件可以完全或单独存在于页面上。必须存在父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();

    }

});

1 个答案:

答案 0 :(得分:1)

在几个不同的脚本之间拆分代码时,如果一个脚本依赖另一个脚本,则需要确保它们的顺序正确。例如,如果一个绑定到一个事件,另一个触发一个事件,你将需要确保在事件立即发生时首先包含绑定到事件的事件,否则事件将在事件处理程序进入之前发生的地方。