我试图围绕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变量是我看到可能直接将视图的两个部分绑定在一起的唯一方法。还有其他方法吗?
答案 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上可能有包裹。