响应变量来捕获用户输入(Meteor)

reactive variable to capture user input (Meteor)

本文关键字:输入 Meteor 用户 变量 响应      更新时间:2023-09-26

我还在努力理解Meteor中的响应式编程模型,所以这可能是一个愚蠢的问题,但是:

我可以使用模板系统提取数据,而不是"注入"它,如文档所述。也就是说,我有一个像这样的文本区域

     <textarea id="desc" rows="15" cols="80" >  {{projectDescription}} </textarea>

是否有可能访问projectDescription字段作为响应性数据源,就像它一样?我在REPL中没有使用Template.project.projectDescription,但正如我所说,我是这个游戏的新手。

如果我的建议是不可能的,惯用的方法是什么?比如,我该把

放在哪里呢?
document.getElementById('desc').value

模板上的事件映射是设计来完成的吗?这样做的目的是,比方说,验证输入是否唯一(服务器问题)或执行动态mkdn(就像我现在键入…时正在发生的那样)。但最重要的是,我试着去感受一下Meteor

反应性只是一种方式,但是你可以在模板上注册一个事件来捕捉keydown事件,然后设置一个会话变量。会话变量是响应性数据源,因此您可以使用该变量和模板助手在模板的其他部分创建您的响应性。

例如:

<template name="project>
  <textarea id="desc"></textarea>
  <div>{{projectDescription}}</div>
</template>

Template.project.events({
  "keydown #desc": function (event) {
     var value = $(event.target).val();
     Session.set("projectDescription", value);
  }
});
Template.project.helpers({
  projectDescription: function () {
    var projectDescription = Session.get("projectDescription");
    //do processing
    return projectDescription;
  }
});

Meteor不提供在某些框架中可能遇到的那种双向绑定。可能有一些聪明的包可以帮助解决这个问题,但是一般的方法是将事件绑定到DOM元素:

Template.xyz.events({
    "keyup #desc": function (evt, template) {
        Session.set("projectDescription", evt.currentTarget.value);
    }
});

session-bind包声称要做的就是:会话变量的双向输入绑定。