2012-07-04 63 views
3

我做一個簡單的函數是這樣的:你如何使用反應性會話和參考項目? (數組,對象等)

Game.msg = function(msg){ 
    var m = Session.get("messages") || []; 
    m.push({"text": msg}); 
    Session.set("messages", m); 
}; 

和模板:

Template.field.messages = function(){ 
    return Session.get("messages"); 
}; 

觸發Game.msg()不會觸發自動 - 模板的更新。我懷疑這是因爲數組引用沒有改變[即使內容有]。什麼是觸發更新的最佳方式?

我的哈克解決方法是具有虛設計數變量(VAR C = Session.get( 「MESSAGE_COUNT」)),我在Game.msg設置和參考在Template.field.messages,像這樣:

Game.msg = function(msg){ 
    var m = Session.get("messages") || []; 
    m.push({"text": msg}); 

    // silly, but adding a count so the array size changes and triggers a flush 
    Session.set("messages", m); 
    Session.set("message_count", m.length); 
}; 


Template.field.messages = function(){ 
    var c = Session.get("message_count"); 
    return Session.get("messages"); 
}; 

回答

5

如何使用_.extend創建一個新的可變對象?

Game.msg = function(msg){ 
    var m = Session.get("messages"); 
    m = _.extend([], m); 
    m.push({"text": msg}); 
    Session.set("messages", m); 
}; 

我認爲這比在Session中使用新變量有點清晰。

P.S.對不起,我沒有足夠的評價,所以我把它變成了答案。

+0

謝謝,這是一個很好的建議。我對複製到一個新陣列毫無必要地猶豫,但它應該是一個快速操作。 – Kalid