2017-03-17 171 views
1

我设立我们的客户和我们之间的博客,使他们能够有一个空间说说不同的商业交易(每个商业交易具有参考号码,有它自己的信息)。高速公路JS订阅管理

现在我能够与ZeroMQ和高速公路设置棘轮实现这一目标。每当用户更新博客时,其他订阅他们的用户都会将信息推送到他们的浏览器中。

不过,我有一个链接到一个按钮,在主页上的订阅方法。 (整个想法是,他们将点击左侧菜单栏上的参考,博客条目将出现在屏幕的右侧)。

这是什么引起的,如果用户多次点击同一个引用,或者用户转到其他引用然后回到第一个引用,那么无论何时在博客上有更新,用户都会收到多个更新(每次点击一次 - >每次点击触发订阅)。

任何想法如何防止这种情况发生?

下面是一个创建会话的jQuery的样子:

$('.reference-container').on('click', function(){ 
    idReferencia = $(this).attr('id'); 
    $('#modifyReference').val(idReferencia); 

    console.log('Creating connection with server on topic: ' + idReferencia + '..'); 


    var conn = new ab.Session('wss://plt.prolog-mex.com/wss2/', 

     function() { 
      conn.subscribe(idReferencia, function(topic, data) { 
       $('#messageBoard').prepend('<p class="message-nonown">'+data.article+'</p>') 
       console.log('New article published to category "' + topic + '" : ' + data.title); 
      }); 
     }, 
     function() { 
      console.warn('WebSocket connection closed'); 
     }, 
     {'skipSubprotocolCheck': true} 
    ); 
    console.log 
}); 
+0

听起来像是你需要把它直接在你的脑袋什么是“认购”是。然后担心代码。 –

回答

1

您正在创建两个新的WAMP会话,并在每个按钮上点击该会议的预订。

你应该做的是检查是否点击都已经存在,只是做什么,如果是这种情况。

+0

谢谢@gzost!这就是我的想法,但是我没有能够做这样的验证,我试着看文档,但我似乎无法检查这个(我对WAMP会议是比较新的)。你能给我任何见解吗? (即使我尝试将conn变量发送到控制台,我也会收到未定义的数据。 –

+0

在初始会话建立+成功订阅之后,您需要将此存储在函数的外部(例如,在全局对象中)。 ,在函数内部定义的你的“conn”在下一个函数执行时是不可访问的,因为它的存在被限制在那个函数执行的范围之内 – gzost

+0

我非常感谢你的帮助(谢谢!),的确我只是删除了var来确保变量是全局的,现在我可以访问会话信息。 –