【问题标题】:Javascript public namespace functions not defined when deployed部署时未定义 Javascript 公共命名空间函数
【发布时间】:2015-11-14 11:12:42
【问题描述】:

下面有我分配给公共 Javascript 命名空间的脚本。它们在本地都可以正常工作,我可以调用TEST.loading(true) 并且所有行为都按预期运行,但是当我将它们部署到我的远程服务器时,我在 Chrome/Firefox 控制台中收到以下错误; 未捕获的 TypeError:TEST.loading 不是函数

我不明白为什么它会在本地而不是远程工作。我认为这不会有任何区别,但是我正在使用 MVC 捆绑包来部署脚本,并且我已经检查了 Chrome 的网络输出,并且脚本正在正常加载,我可以看到里面的代码......任何建议?

var TEST = TEST || 
{
    dtFormat: "DD MMMM YYYY HH:mm",

    loading: function loading(showLoading) {
        if (showLoading) {
            if (Modernizr.cssanimations)
                $("#loadingAnimation").show();
            else
                $("#loadingStatic").show();
            $("#loadingContainer").show();
        }
        else {
            if (Modernizr.cssanimations)
                $("#loadingAnimation").hide();
            else
                $("#loadingStatic").hide();
            $("#loadingContainer").hide();
        }
    }
};

【问题讨论】:

  • TEST 在您声明此变量之前存在?
  • 不,我也尝试过许多其他命名空间,结果总是一样,本地很好,远程它似乎不喜欢它
  • @Jak:关键是如果已经定义了TEST,您就不会将loading 添加到现有的。你上面的代码变成了无操作。
  • 有什么理由首先拥有var TEST = TEST || {,为什么不简单地使用var TEST = {
  • @Jak:上面的语法只有在你的脚本可能被加载两次时才有用。如果您有多个模块可能会向TEST 添加内容,则它没有用。

标签: javascript javascript-namespaces


【解决方案1】:

当代码运行时,TEST 似乎已经定义了一个真值,从而使该代码成为空操作。

如果你想确保总是添加你的属性,不管它是否已经存在,这是通常的模式:

var TEST = (function(t) {
{
    t.dtFormat = "DD MMMM YYYY HH:mm";

    t.loading = function loading(showLoading) {
        if (showLoading) {
            if (Modernizr.cssanimations)
                $("#loadingAnimation").show();
            else
                $("#loadingStatic").show();
            $("#loadingContainer").show();
        }
        else {
            if (Modernizr.cssanimations)
                $("#loadingAnimation").hide();
            else
                $("#loadingStatic").hide();
            $("#loadingContainer").hide();
        }
    };

    return t;
})(TEST || {});

这还具有为您提供方便的私有函数作用域的优点。

【讨论】:

  • 太棒了,谢谢你,看起来修复得很好:)
  • @Jak:酷。如果是我,我想知道为什么 TEST 在某些情况下已经定义了一个真实的值,所以绝对值得破解调试器。问候,
  • 浏览我想我找到了另一个已经设置了 TEST 值的脚本,我认为这会导致某种冲突,但现在我知道如何解决它,我可以继续挖掘和全部整理出来
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2018-09-06
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
相关资源
最近更新 更多