用于捕获用户输入的反应变量(Meteor)

时间:2013-06-19 01:08:21

标签: javascript meteor

我仍然试图围绕Meteor的反应式编程模型,所以这可能是一个愚蠢的问题,但是:

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

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

那么可以将projectDescription字段作为反应数据源访问吗?我没有在REPL的任何地方使用Template.project.projectDescription,但正如我所说,我是这个游戏的新手。

如果我提出的建议是不可能的,那么惯用法是什么?比如,我会把我的

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

模板上的事件地图是按照设计方式完成的吗?例如,这是为了验证输入是唯一的(服务器问题)还是动态执行mkdn(就像我输入时正好发生......)。但大多数情况下,我试图了解Meteor。

3 个答案:

答案 0 :(得分:5)

反应性只是一种方式,但您可以在模板上注册事件以捕获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;
  }
});

答案 1 :(得分:2)

Meteor不提供您在某些框架中可能遇到的双向绑定类型。可能有智能包可以帮助解决这个问题,但是vanilla方法是将事件绑定到DOM元素:

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

答案 2 :(得分:0)

session-bind包声称这样做:双向输入绑定到会话变量。我很惊讶没有其他"reactive input" packages on Atmosphere这样做。