类角度客户端数据绑定和与Meteor的反应?

时间:2014-05-29 11:28:15

标签: meteor reactive-programming

我试图围绕Meteor处理反应性的方式,我想确保我有一些正确的概念。

采取以下反应性示例:

用户在表单字段中键入内容。他正在键入的内容会立即显示在页面上的其他位置,因为用户正在逐字打字。瞬间重复。

据我所知,Angular,这是一个非常常见的反应性例子。 Angular将输入直接绑定到客户端的输出。两者之间什么也没有。

纠正我,因为我错了,但Meteor可以做到这一点,但输入首先需要被捕获并存储到Mongo + MiniMongo DB中(可能只作为本地存储中的集合),需要订阅步骤,然后将读取这些值并在页面上显示。

有没有办法直接将前端的事件绑定到前端的另一个东西,就像Angular一样?

这是对的吗?要使Meteor具有Angular的前端唯一反应性,它必须首先通过集合的中介,这意味着与Angular相比,完成此操作需要额外的代码吗?

Meteor Docs中的示例:

Deps.autorun(function () {
  Meteor.subscribe("messages", Session.get("currentRoomId"));
});

所以在这里,当currentRoomId的数据发生变化时,该函数对该数据变化起反应并运行该函数(在这种情况下,Meteor订阅messages)。

使用Session变量是我看到可能直接将视图的两个部分绑定在一起的唯一方法。还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

Meteor的客户端反应系统(Deps)未与其实时MongoDB同步相结合。您可以将它与任何实现正确接口的反应数据源一起使用,包括完全是客户端的数据源。例如,您可以使用内置的Session对象。这只是一个客户端键值存储,支持Meteor的反应性,您不必发布或订阅使用它。

这种做这种事情的标准方法看起来像这样:

<input id="field" value="{{fieldValue}}">
Template.form.fieldValue = function () {
  return Session.get("fieldValue");
};

Template.form.events({
  "input #field": function (evt) {
    Session.set("fieldValue", $(evt.currentTarget).val());
  }
});

现在,会话变量fieldValue已同步到表单字段。您可以在某个帮助器中调用Session.get("fieldValue"),当用户在表单字段中键入时,该模板将重新呈现。如果您拨打Session.set("fieldValue", "blah"),则表单字段将自行更新。

关于您的修改:您可以使用Deps.Dependency创建自己的被动数据源,也可以meteor add reactive-dict使用{{1}},但未记录。 Atmosphere上可能有包裹。