2015-04-06 60 views
1

你好,我正在nodejs中創建一個應用程序。想法是一個人可以問一個問題,而其他人可以回答。我alreadt取得了問一個問題的一部分,但答覆,並只顯示從1個問題的答覆是困擾着我這個代碼只在提交表單的表單上預留一個div

function displayMsg(data){ 
      console.log(data); 
      var name = data.name 
      var msg = data.msg 
      var id = data._id 

      $messages.prepend("<div class='bubble'><strong>" + name + " says: " + "</strong>" + "<br/>" + msg + "<form id=" + id + " class='form-inline'><div class='form-group'><input type='text' class='form-control' id='reply" + id +"'></div><button type='submit' class='btn btn-default'>Reply</button></form><div id='replies" + id +"'></div></div>");  
     } 

所以此功能將顯示一個新的問題,我的答覆形式加入。我給每個表單提交提交的問題的ID,所以每個表單都有一個唯一的ID。那麼回覆的輸入字段和我想要預先回復的回覆div也是如此。

現在我能夠建立一個回覆系統,但回覆顯示在每個問題下。

我只希望他們回覆

你可以看到在這個撥弄我的完整的JavaScript(jQuery的)代碼的問題下所示的答覆。它顯然不會工作,因爲它是翡翠和節點+ socketio https://jsfiddle.net/bvLnLkwL/3/

+0

請小提琴。 – Bazinga

+0

將表單id屬性的值用引號 – Plato

+0

包裹起來,如果$ messages.prepend()將它放在錯誤的地方,您也可能想要將彈出窗口放在其他位置 – Plato

回答

0

我不是專家在你使用的具體技術,但乍一看我會說,問題是你的聽衆都聽對於相同的全局new reply事件,無需確定回覆是否與其具體問題ID相關。

除非這是SocketIO自己處理的東西,否則您可能希望創建不同的回覆通道來偵聽每個表單,或者檢查偵聽器中的問題ID。

例如,與數據發送ID:

socket.on('new_reply', function(data){ 
    if(data.question === id) { 
     $repliesDiv.prepend("<div id='areply'>"+data.reply+"</div>"); 
     $('#areply').addClass("fadeInTop"); 
    } 
}); 

或者讓獨特的 '通道',類似這樣的:

socket.on('new_reply.' + id, function(data){ 
    $repliesDiv.prepend("<div id='areply'>"+data.reply+"</div>"); 
    $('#areply').addClass("fadeInTop"); 
}); 

我不知道是否/如何這最後一個會影響力表現。

+0

我對SocketIO相當陌生,所以我不清楚它是如何工作的。但是你的推理是有道理的,我只是不知道如何應用它。 – Cruzito

+0

@ user1439495將問題標識與響應數據一起發送,以便您可以檢查偵聽器中的標識,例如。或者聽名字中包含的ID的事件,所以你知道所有的回覆將是關於這個問題。 – gpgekko

+0

林不知道如何做到這一點 – Cruzito