2017-03-17 165 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來確保變量是全局的,現在我可以訪問會話信息。 –