当发布和订阅在两个单独的文件中时,Amplify.js发布订阅不起作用

时间:2016-08-27 00:41:05

标签: javascript jquery publish-subscribe amplifyjs

我想让Amplify.js发布/订阅使用2个文件。

当代码是一个文件时,我可以让它工作,但是当发布时,则不能 在一个文件中,订阅在另一个文件中。

以下是订阅和发布调用所在的代码 同一个文件。这有效。

<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函数中,param是:bar'
    '放大。发布后,结果是真的'

当我将订阅和发布放在单独的文件中时, 不会调用amplify.subscribe函数。为了这 测试,我有两个浏览器(两个Firefox)。我在一个上运行订阅 浏览器,然后在另一个上发布。

以下是订阅的代码(我只是删除了发布部分)

<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时遇到了同样的问题。

有没有人对此有任何想法?
有没有人对此有更深入的了解,比如
存储的发布数据在哪里?多久了? 我怎么能看出它是否存在。
订阅在哪里查找数据?
发布订阅是否可以使用两个文件?

1 个答案:

答案 0 :(得分:1)

发布数据不会存储在任何地方。

存储回调函数。在放大的正常变量内。您可以想象一个事件名称为关键字的地图。回调函数作为值。

使用事件名称发布时,将从地图&amp;中检索该事件的回调。使用您传递的数据执行。

这里的问题是地图对于每个页面都是本地的,就像任何其他JavaScript变量一样。

  • 因此,在第一页中只存储了回调,但调用该事件的同一页面中没有代码。
  • 在第二页中,由于没有定义回调,因此没有任何东西可以处理该事件。

所以你要找的是一种跨页面共享JavaScript变量的方法。在SO中的快速搜索揭示了一些尝试。我认为他们应该帮助你实现同样的目标: