2013-03-10 19 views
1

我遇到了我正在處理的Node.js應用程序的客戶端代碼中的問題。
這個背後的想法是在套接字收到事件時立即更新瀏覽器。ClientJade - 麻煩執行jade.render()

這是在客戶端腳本塊:

script(src='/scripts/jadeTemplate.js') 
script(src='/socket.io/socket.io.js') 
script(type='text/javascript') 
    var socket = io.connect(); 
    socket.on('obj', function(obj) { 
    var newsItem = document.createElement("item"); 
    jade.render(newsItem, 'objTemplate', { object: obj }); 
    $('#newsfeed').prepend(newsItem); 
    alert(obj); 
    }); 

alert()jade.render()之前放置,則會發出警報,但如果之後插入,它不執行(因此,我認爲這是一個問題與jade.render())。

這是objTemplate.jade,在第7行簡稱:

p #{object} 
// That's it. 

這是從app.js相關片段:

var server = dgram.createSocket('udp4'); 
server.bind(41234); 
server.on('message', function(buf, rinfo) { 
    isOnline = true; 
    var message = buf.toString(); 
    io.sockets.emit('obj', message); 
}); 

UPDATE:

Here's a link/public/scripts/jadeTemplate.js,其中IMO太長的問題片段。

如果我需要提供更多的片段或文件,請告訴我。 :)

+0

你能發表jadeTemplate.js嗎? – 2013-03-10 16:23:09

+0

已添加。我覺得這個問題本身太長了,所以我連接了一個Pastebin粘貼,如果沒關係的話。 [也鏈接到這裏](http://pastebin.com/h8CwqFgD)。 – ChaoticWeg 2013-03-10 18:23:41

回答

1

您的模板不想要屬性object,它想要obj。試試這個:

socket.on('obj', function(obj) { 
    var newsItem = document.createElement("item"); 
    jade.render(newsItem, 'objTemplate', { obj: obj }); // changed object to obj 
    $('#newsfeed').prepend(newsItem); 
    alert(obj); 
}); 

http://jsfiddle.net/trevordixon/VeYBY/顯示它正在工作。如果您將屬性更改回object,您將在控制檯中收到javascript錯誤。

+0

太棒了!這是問題所在。我不知道爲什麼我想改變標識符,因爲我害怕'obj'鍵會被解釋爲一個標識符,並且腳本會嘗試傳遞'obj'兩次,而不是創建一個名爲「obj」的屬性「價值'obj'。無論如何,它現在適用於這種調整。再次感謝@Trevor Dixon :) – ChaoticWeg 2013-03-13 01:36:50