4

Amplify.js のパブリッシュ/サブスクライブを 2 つのファイルで動作させようとしています。

コードが 1 つのファイルの場合は機能しますが、パブリッシュが 1 つのファイルにあり、サブスクライブが別のファイルにある場合は機能しません。

サブスクライブとパブリッシュの呼び出しが同じファイルにあるコードを次に示します。これは機能します。

<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"> </script>
<script 
  type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">   
</script>
</head>
<body>
<H1>My amp pub/sub page</H1>
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) { 
 alert("In the amplify.subscribe function, 
 param is: " + param.foo ); } );
alert("after line amplify.subscribe");
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html>

結果は、次のように予想される順序でアラートを出力
する
こと
です

サブスクライブとパブリッシュを別のファイルに入れると、amplify.subscribe 関数が呼び出されません。このテストでは、2 つのブラウザー (両方とも Firefox) を使用しています。1 つのブラウザーでサブスクライブを実行してから、別のブラウザーで公開します。

サブスクライブのコードは次のとおりです (パブリッシュ部分を切り取っただけです)。

<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>
</head>
<body>
<H1>My amp sub page</H1>   
<script type="text/javascript">
alert("entering page");
amplify.subscribe("dataExample", function(param) { 
    alert("In the amplify.subscribe function, param is: " + 
    param.foo ); } );
alert("after line amplify.subscribe");
</script>
</body>
</html>

パブリッシュ用のコード (サブスクライブの部分を切り取っています)

<html>
<head>
<script type="text/javascript" src="./js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="./js/amplify-1.1.2/amplify.min.js">
</script>  
</head>
<body>    
<H1>My amp pub page</H1>
<script type="text/javascript">
alert("entering page");     
result = amplify.publish("dataExample", { foo: "bar" } );
alert ("After amplify.publish, result is " + result );
</script>
</body>
</html> 

Firefox バージョン 47.0.1
を使用していますが、Chrome を使用すると同じ問題が発生します。

誰かがこれについて何か考えを持っていますか? パブリッシュデータがどこに保存されているか
など、これについてより深い知識を持っている人はいますか?
どれだけの時間?
そして、それがそこにあるかどうかをどのように確認できますか。
サブスクライブはどこでデータを探していますか?
パブリッシュ サブスクライブは 2 つのファイルで機能しますか?

4

1 に答える 1

1

パブリッシュ データはどこにも保存されません。

コールバック関数が格納されます。通常の変数内で増幅します。イベント名をキーとし、コールバック関数を値とするマップを想像できます。

イベント名で公開すると、そのイベントのコールバックがマップから取得され、渡されたデータで実行されます。

ここでの問題は、他の JavaScript 変数と同様に、マップがすべてのページに対してローカルであることです。

  • したがって、最初のページにはコールバックのみが保存されますが、同じページ内にイベントを呼び出すコードはありません。
  • コールバックが定義されていないため、2番目のページでは、そのイベントを処理するものは何もありません。

あなたが探しているのは、ページ間で JavaScript 変数を共有する方法です。SOで簡単に検索すると、いくつかの試みが明らかになりました。同じことを実装するのに役立つはずだと思います:

于 2016-08-27T06:48:34.707 に答える