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を使用しており、以下はdir構造です:

クライアント アプリのディレクトリのレイアウト

ありがとう。

更新 - さらなるテスト

ヘッダーを次のように減らしました。

<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 を追加 これはファイルの内容です。代わりに jquery ライブラリを使用するために、cometd ライブラリの機能を「再バインド」しているようです (?)。私はこれをデバッグするのに 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 プライマーに投稿された指示にもっと厳密に従わなければなりませんでした。基本的に、プロジェクトをセットアップするときにディストリビューションをダウンロードしてから、tarball内にバンドルされている war ファイルからコードを取得する必要があります。SO、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. からjqueryフォルダーを取得しますcometd-javascript-jquery-2.5.1.war

組織の名前空間の定義は、ファイル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 に答える