2

我正在开发我的第一个 Meteor 应用程序,但我不知道如何在所有浏览器中更新某些内容。

情况是这样的:当一个人在打字时,我想在所有浏览器上显示“正在打字……”(所以对每个用户来说),但我不知道该怎么做。

到目前为止,这是我的代码:

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 回答