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()をトリガーしても、テンプレートの自動更新はトリガーされません。配列参照が変更されていないためだと思います[内容は変更されていますが]。更新をトリガーする最良の方法は何ですか?

私のハッキーな回避策は、Game.msgで設定し、Template.field.messagesで参照するダミーのカウント変数(var c = Session.get( "message_count"))を次のように設定することです。

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");
};
4

1 に答える 1

5

_.extendを使用して、このような新しい可変オブジェクトを作成するのはどうですか?

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

Sessionに新しい変数を含めるよりも少し明確だと思います。

PS申し訳ありませんが、コメントするのに十分な評判がないので、それを答えに変えます。

于 2012-07-06T06:29:32.550 に答える