2

初めて Meteor アプリを作成していますが、すべてのブラウザーで何かを更新する方法がわかりません。

これは状況です: 1 人が入力しているときに、すべてのブラウザーで (各ユーザーに対して) 「入力中...」と表示したいのですが、その方法がわかりません。

これまでの私のコードは次のとおりです。

Messages = new Meteor.Collection("messages");
if( Meteor.isClient ) {

  // Templating
  Template.messages.entries = function() {
    return Messages.find();
  };

  // Events
  Template.messages.events({
    'click #new_post' : function() {
      var new_message = document.getElementById("new_message").value;
      if( new_message.length > 0 ) {
        Messages.insert({ text: new_message });
        document.getElementById("new_message").value = "";
      }
    },
    'focus #new_message' : function() {
      // Say "typing..."
    },
    'blur #new_message' : function() {
      // Say nothing
    }
  });
}

ご覧のとおり、私が言いたいのは、テキストフィールドがフォーカスされているときに入力することです。今、私は前にこれを試しました(しかし、うまくいきませんでした):

'focus #new_message' : function() {
  // Say "typing..."
  Template.messages.typing = function() {
    return "typing...";
  };
},

しかし、それは私の HTML を更新しませんでした。テンプレートで {{typing}} タグを取得しました。これはテンプレート メッセージです。その通りです。でも更新しません。。

手がかりはありますか?

4

1 に答える 1

2

Meteorでパブリッシュ/サブスクライブするブラウザー間で同期されるのはコレクションのみです。

Usersたぶん、あなたはフィールドを持つコレクションのようなものを持っていてis_typing、それを使ってリアクティブなテンプレートヘルパーを作成することができますか?

非常に基本的な例:

Template.messages.is_typing = function() {
  return Users.find({is_typing:true}).count() > 0
};

とテンプレートで

<template name="messages">
  {{#if is_typing}}
     typing
  {{else}}
     idle
  {{/if}}
</template>
于 2012-09-28T20:22:34.647 に答える