0

在尝试实现配置 javascript 文件以启用/禁用基于开发或生产环境的用户界面功能时,我一直注意到一些奇怪的行为,并且可以使用一些说明。

这是一个平面应用程序,我将 javascript 拆分为三个文件:index.js、dashboard.js 和 taxonomy.js。

<script type = "text/javascript" src = "/static/js/taxonomy.js"></script>
<script type = "text/javascript" src = "/static/js/dashboard.js"></script>
<script type = "text/javascript" src = "/static/js/index.js"></script>
<script type = "text/javascript" src = "/static/js/config.js"></script>

index 脚本处理登录、注销和元素初始化功能。其定义为

$(document).ready(function(){ 
  $.ajax({
    //query db for login
    success : function(){
      loginHandler()
    }
});

function loginHandler(){
  initializeDashboardElements()
  initializeTaxonomyElements()
}

在 taxonomy.js 中,没有$(document).ready()定义,但initializeTaxonomyElements()存在,它将 jQuery UI 绑定应用到指定的 HTML 元素。一个这样的元素是一个标签小部件,它目前包含 4 个标签,但预计会增长。

在里面config.js,我有这个用于生产环境:

$(document).ready(function(){
  $("#tabs").tabs("option", "disabled", [1, 2]);
});

鉴于此设置,我得到一个错误

Error: cannot call methods on tabs prior to initialization; attempted to call method 'option'

我也在声明中尝试过initializeTaxonomyElements()这个$(document).ready()。发生同样的错误。

有什么建议可以解决这个问题吗?

4

1 回答 1

0

原因是 AJAX 调用立即退出(其目的是附加事件处理程序,而不是等待事件;success它的一部分仅在服务器完成 AJAX 请求后触发)。几乎可以肯定,函数 in$(document).ready(function(){ $("#tabs").tabs("option", "disabled", [1, 2]); });在任何初始化initializeTaxonomyElements()发生之前执行。

要解决此问题,请将调用$("#tabs").tabs("option", "disabled", [1, 2]);作为 AJAXsuccess方法的一部分执行(在 之后initializeTaxonomyElements())。

于 2013-09-11T19:54:21.220 回答