6

我仍在尝试围绕 Meteor 中的反应式编程模型进行思考,所以这可能是一个愚蠢的问题,但是:

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

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

那么是否可以像以前那样访问 projectDescription 字段作为反应数据源?我在 REPL 上没有使用 Template.project.projectDescription,但正如我所说,我是这个游戏的新手。

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

document.getElementById('desc').value

模板上的事件地图是否按照设计的方式进行?这样做的目的是,例如,验证输入是否唯一(服务器问题)或即时执行 mkdn(就像我键入时现在正在发生的那样......)。但大多数情况下,我正在尝试感受 Meteor。

4

3 回答 3

6

反应性只是一种方式,但是您可以在模板上注册一个事件以捕获 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;
  }
});
于 2013-06-19T03:41:47.400 回答
2

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

Template.xyz.events({
    "keyup #desc": function (evt, template) {
        Session.set("projectDescription", evt.currentTarget.value);
    }
});
于 2013-06-19T03:29:47.000 回答
0

session-bind包声称可以做到这一点:双向输入绑定到会话变量。我很惊讶Atmosphere 上没有其他“反应式输入”包可以做到这一点。

于 2014-04-15T22:55:56.053 回答