5

我正在尝试将旧的 cometd javascript 包装器和测试客户端(是 1.3.x)更新到较新的 comet 2.5.1 javascript 实现。我有所有的依赖项,浏览器可以找到它们,但我在 Firebug 的控制台中遇到错误(见下文) 关于多个错误

我的 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)
{
 ....
}

那么这不是定义组织吗?请注意,控制台中的任何错误都不是来自Cometd.js. 否则我看不到“org.cometd”的其他定义。如果有人可以帮助我,我将不胜感激。我正在使用 Tomcat 7,以下是目录结构:

客户端应用程序的目录布局

谢谢。

更新 - 进一步测试

我将标题减少为:

<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);
4

2 回答 2

5

所以问题是我误解了 Comet.org 网站的项目布局。对于非 Maven 设置,我应该更密切地遵循 Cometd Primer 上发布的方向。基本上,当您设置项目时,您会下载发行版,然后您需要从捆绑在tarball 中的 war 文件中获取代码。所以,一旦你提取了压缩包......

  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)中获取 org 文件夹
  2. 从 jquery 文件夹中获取cometd-javascript-jquery-2.5.1.war

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

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

org.cometd.JSON = {};

这些功能现在可以正常工作。

于 2013-01-30T15:05:46.130 回答
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>
于 2013-01-30T14:11:12.623 回答