简单的彗星应用程序“org未定义”

时间:2013-01-30 14:01:45

标签: javascript jquery comet

我正在尝试更新旧的cometd javascript包装和测试客户端(是1.3.x),我有更新的彗星2.5.1 javascript实现。我有所有的依赖项,浏览器可以找到它们,但我在Firebug的控制台中遇到错误(见下文) Multiple errors about "org"

我的HTML主管如下:

<head>
    <title>CometD Tester</title>
    <link rel="stylesheet" type="text/css"href="style/style.css" />
    <script type="text/javascript" src="org/cometd/Cometd.js"></script>
    <script type="text/javascript" src="org/cometd/AckExtension.js"></script>
    <script type="text/javascript" src="org/cometd/ReloadExtension.js"></script>
    <script type="text/javascript" src="jquery/jquery-1.9.0.js"></script>
    <script type="text/javascript" src="jquery/jquery.cookie.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd-reload.js"></script>
    <script type="text/javascript" src="js/myCometd.js"></script>
</head>

所有这些都是浏览器找到的。查看Cometd.js我看到以下内容:

org.cometd.Cometd = function(name)
{
 ....
}

那不是定义org吗?请注意,控制台中的所有错误都不是来自Cometd.js。否则我看不到“org.cometd”的其他定义。如果有人能帮助我,我将非常感激。我正在使用Tomcat 7,以下是dir结构:

Layout of the directories for the client app

感谢。

更新 - 进一步测试

我将标题缩减为:

<head>
    <title>CometD Tester</title>
    <link rel="stylesheet" type="text/css"href="style/style.css" />
    <script type="text/javascript" src="org/cometd/Cometd.js"></script>
</head>

从index.html中删除了所有JS。现在唯一包含的JS是来自comet.org的Cometd.js。仍然存在相同的错误......来自该脚本的第一行:

org.cometd.Cometd = function(name)

不确定我在这里错过了什么。

编辑 - 添加jquery.cometd-reload.js 这是文件的内容。看起来它是来自cometd库的“重新绑定”功能,而不是使用jquery(?)。我在JS中没有足够的速度来调试它(我真的是一个C ++开发者)。

(function($)
{
    function bind(org_cometd, cookie, ReloadExtension, cometd)
    {
        // Remap cometd COOKIE functions to jquery cookie functions
        // Avoid to set to undefined if the jquery cookie plugin is not present
        if (cookie)
        {
            org_cometd.COOKIE.set = cookie;
            org_cometd.COOKIE.get = cookie;
        }

        var result = new ReloadExtension();
        cometd.registerExtension('reload', result);
        return result;
    }

    if (typeof define === 'function' && define.amd)
    {
        define(['org/cometd', 'jquery.cookie', 'org/cometd/ReloadExtension', 'jquery.cometd'], bind);
    }
    else
    {
        bind(org.cometd, $.cookie, org.cometd.ReloadExtension, $.cometd);
    }
})(jQuery);

2 个答案:

答案 0 :(得分:5)

所以问题是我误解了Comet.org网站的项目布局。我应该更加密切地关注cometd primer for non-maven setups发布的指示。基本上,在设置项目时,您需要下载分发版,然后需要从 war文件中捆绑 tarball中获取代码。 所以,一旦你提取了tarball ......

  1. cometd-javascript-common-2.5.1.war(位于\cometd-2.5.1\cometd-javascript\jquery\target)或cometd-javascript-jquery-2.5.1.war(位于\cometd-2.5.1\cometd-javascript\common\target
  2. 中获取组织文件夹
  3. cometd-javascript-jquery-2.5.1.war
  4. 获取jquery文件夹

    组织名称空间定义位于文件org/cometd.js中,我以前没有,因为我错误地认为它已被org/cometd/Cometd.js文件替换。名称空间orgcomet的定义如下:从该文件的第17行开始:

    // Namespaces for the cometd implementation
    this.org = this.org || {};
    org.cometd = {};
    
    org.cometd.JSON = {};
    

    现在功能正常。

答案 1 :(得分:3)

尝试在任何其他JavaScript文件之前加载jQuery -

<head>
    <title>CometD Tester</title>
    <link rel="stylesheet" type="text/css"href="style/style.css" />
    <script type="text/javascript" src="jquery/jquery-1.9.0.js"></script> <!-- load first -->
    <script type="text/javascript" src="org/cometd/Cometd.js"></script>
    <script type="text/javascript" src="org/cometd/AckExtension.js"></script>
    <script type="text/javascript" src="org/cometd/ReloadExtension.js"></script>
    <script type="text/javascript" src="jquery/jquery.cookie.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd-reload.js"></script>
    <script type="text/javascript" src="js/myCometd.js"></script>
</head>