对象文字未定义,除非包装在jQuery onready中;需要调试的想法

时间:2012-11-02 11:54:20

标签: javascript jquery

采用了一些javascript代码,我将其重新整理成较小的文件,以使其更易于管理;我从未成为一名全职的javascript工程师,但已经使用了一段时间,但对它感觉不太舒服。

我有一个对象文字,可以处理我们网站的大部分控制器级活动。我们重新安排了代码并将其放在不同的文件中,但是有一个特定的对象,我得到一个未定义的错误。查看文件的加载顺序,它出现在jQuery之前。将此对象文字包装在另一个jQuery onready包装器中也可以解决问题。如果我通过某种形式检查这样:

if (typeof arc.event_handler === "undefined"){
 alert("something is undefined");
}else{
 alert("something is defined");
}

然后使用jQuery onready wrap,它被定义但没有它是未定义的。就像(我知道这个代码可以使用或不使用jQuery onload)

// file-1.js 
var arc={};
$(document).ready(function(){
  arc.event_handler={
    do_something: function(){
      alert('do something');
    }
  }
});

然后在不同的文件中

// later in load order z-file.js
$(document).ready(function(){
  if (typeof arc.event_handler === "undefined"){
    alert("something is undefined");  
  }else{
    alert("something is defined");
   }


  $('.some').on('click',function(){
     arc.event_handler.do_something();
  });
});

我有点不知道可能导致这种行为的原因。我的理解是,即使是外部文件,jQuery onready中的部分应该基本上使它等到这些其他部分被加载。我可能没有得到一些非常简单的东西,但想看看下一步看下一步有什么想法吗?

事先提前

1 个答案:

答案 0 :(得分:1)

<script type="text/javascript" src="/first.js"></script>
<script type="text/javascript" src="/second.js"></script>

first.js:

arc = {
    event_handler: {
        do_something: function(){
            alert('do something');
        }
    }
};

second.js:

$(document).ready(function(){
    $('.some').on('click', arc.event_handler.do_something);
});