Javascript jQuery自动执行函数未激发

Javascript jQuery自动执行函数未激发,javascript,jquery,Javascript,Jquery,我正在将我的意大利面jQuery代码重构为组件。到目前为止,我已经构建了一个组件,它封装在一个自燃函数中 $(document).ready(function () { debugger; }); (function () { Component.init(); var Component = { init: function () { this.cacheDom(); this.bindEvents()

我正在将我的意大利面jQuery代码重构为组件。到目前为止,我已经构建了一个组件,它封装在一个自燃函数中

$(document).ready(function () {
    debugger;
});

(function () {
    Component.init();

    var Component = {
        init: function () {
            this.cacheDom();
            this.bindEvents();
            debugger;
        },
        cacheDom: function () {
            //Initialize properties
        },
        bindEvents: function () {
            //setup eventhandlers
        },
        function1: function (event) {
            //do some work here
        },
    };
})();
我的jQuery正在运行dom.ready函数,但我的自执行函数没有执行任何操作。此外,我确实尝试删除自执行函数并初始化我的
$(document).ready(function)
中的组件,但它没有命中我放在init函数中的
调试器


我已经多次查看了我的代码,似乎无法理解为什么
组件
根本没有初始化

您可以通过更新当前模块模式来解决此问题,如:

//这是我们的主要组件模块
//---------------------------------------------------
var组件=(函数(){
//这里的所有私有变量
//---------------------------------------------------
var$blog;
//将初始化逻辑放在这里
//---------------------------------------------------
var init=函数(){
console.log('Inside init()')
cacheDom();
bindEvents();
};
//在此处缓存所有必需的DOM元素
//---------------------------------------------------
var cacheDom=函数(){
//初始化属性
console.log('Inside cacheDom()')
$blog=$(“#blog”);
};
//在此处设置所有事件处理程序
//---------------------------------------------------
var bindEvents=函数(){
//设置事件处理程序
console.log('Inside bindEvents()'))
$blog.on('click',function1);
};
//这里的所有其他方法
//---------------------------------------------------
var function1=函数(事件){
//在这里做些工作
};
//返回要公开的方法
//---------------------------------------------------
返回{
初始化,
};
})();
$(文档).ready(函数(){
console.log('Inside document.ready()'))
Component.init();
});

创建一个复制问题的小提琴。这真是太好了。然而,似乎我的所有事件都是从一开始就被触发的,并且之后什么都不做——例如,我有一个引导模式:
$root.on('show.bs.modal',populateModal(event))它在组件模型之外工作,但在这里它只触发一次事件,而不会在事后执行。这是因为您正在使用
()
调用函数本身并将其分配给事件处理程序。要解决这个问题,我们只需将它包装在函数中,就像或者只分配函数而不分配
()
,事件就会像这样自动传递。太棒了!非常详细的回答:-)我希望在我的jQuery意大利面上使用这种模式是朝着正确的方向前进的。此外,我们也对一些非常古老的jQuery项目进行了同样的操作。这很有帮助,因为它们中的大多数现在都处于维护阶段。此外,如果任何模块基于代码行变得非常大,我们会尝试基于类似的逻辑创建子模块,以保持检查和更好的错误跟踪和调试目的。这是有意义的。否则很快就会失控!