我喜欢Meteor的一件事是在客户端完成的更新,插入和删除是在服务器端自动保留的。大部分时间这都很棒。但有时您希望将Meteor的集合用于显示逻辑,或者您希望具有用户必须专门承诺的特定的,暂存的“保存”。因此,您希望继续使用集合进行渲染,但您不一定希望将这些更改保存到数据库中。
也许一个例子将有助于明确这一点。
我有一个呈现指定地图原点的表单。
<template name='map'>
<button class='select-origin'>Select Origin</button>
{{#with currentMap}}
{{this.latitude}} - {{this.longitude}}
{{/with}}
</template>
Template.map.helpers({
currentMap: function(){ return Maps.findOne(Session.get('currentMap')) };
});
当我编辑地图时,将从数据库中读取纬度和经度并进行适当的渲染。
但我也希望让用户选择新的地图来源并更新模板而不保存新的地图来源。我希望用户单击地图,然后我可以使用该地图更新集合客户端,然后将更新模板。但是我希望用户专门点击save
然后然后在服务器上保留新的经度和经度。 Backbone中很容易做到这一点(其中set
和save
是截然不同的),但在Meteor中似乎并不容易。
有没有人有好的策略来处理这些情况?
答案 0 :(得分:1)
对于这类问题,我使用Session
对象
您已将当前地图保留在会话中。您可以将所有更改应用于会话中的对象,并在用户单击保存后,更新MiniMongo实例并让Meteor更新服务器。
我不确定CurrentMap
对象包含哪些属性,因为您的代码中未显示设置操作,但似乎您可以替换
Template.map.helpers({
currentMap: function(){ return Maps.findOne(Session.get('currentMap')) };
});
与
Template.map.helpers({
currentMap: function(){ return Session.get('currentMap') };
});