2013-03-24 75 views
1

我喜欢流星的一件事情是,客户端的更新,插入和删除操作会自动保存在服务器端。大多数时候这很棒。但是有时候你想要使用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中这样的东西很容易(其中setsave不同),但在流星中看起来并不容易。

有没有人有处理这些情况的好策略?

+0

林有点困惑,如果你想要用户更新地图位置而不保存它,不能直接告诉地图移动到不同的位置吗?当他们按下保存,然后在服务器上更新它? – Akshat 2013-03-24 09:37:19

+0

有时候我可以做到这一点,但在示例中,我显示我希望模板使用新选择的地图位置进行更新。我想使用这个模板_without_不得不将新的位置保存到数据库。我想临时设置属性,而不是_saving_属性。 – bento 2013-03-24 18:18:29

回答

1

对于这类问题,我用的是Session对象

你已经让你的当前地图中的会话。您可以将所有更改应用于Session中的对象,并且一旦用户单击保存,更新MiniMongo实例并让Meteor更新服务器。

我不知道是什么属性的CurrentMap对象包含,在你的代码没有显示设置操作,但似乎你可以取代

Template.map.helpers({ 
currentMap: function(){ return Maps.findOne(Session.get('currentMap')) }; 
}); 

Template.map.helpers({ 
currentMap: function(){ return Session.get('currentMap') }; 
}); 
+0

感谢您的想法。我不知道对象可以(或应该)存储在'Session'中。我会试试这个。 – bento 2013-03-24 18:24:44