我正在做一个像这样的简单函数:
Game.msg = function(msg){
var m = Session.get("messages") || [];
m.push({"text": msg});
Session.set("messages", m);
};
Run Code Online (Sandbox Code Playgroud)
和一个模板:
Template.field.messages = function(){
return Session.get("messages");
};
Run Code Online (Sandbox Code Playgroud)
触发Game.msg()不会触发模板的自动更新.我怀疑这是因为数组引用没有改变[即使内容有].什么是触发更新的最佳方式?
我的hacky解决方法是有一个虚拟计数变量(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");
};
Run Code Online (Sandbox Code Playgroud)
如何使用_.extend创建一个像这样的新的可变对象?
Game.msg = function(msg){
var m = Session.get("messages");
m = _.extend([], m);
m.push({"text": msg});
Session.set("messages", m);
};
Run Code Online (Sandbox Code Playgroud)
我认为这比在Session中有一个新变量要清楚一点.
对不起,我没有足够的声誉评论,所以我把它变成了答案.
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |