【问题标题】:Staged 'saves' with Meteor使用 Meteor 进行“拯救”
【发布时间】:2013-03-25 00:09:28
【问题描述】:

我喜欢 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 中很容易(其中 setsave 是不同的),但在 Meteor 中似乎并不容易。

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

【问题讨论】:

  • 我有点困惑,如果你想让用户更新地图位置而不保存它不能直接告诉地图移动到不同的位置来完成吗?当他们按下保存然后在服务器上更新它?
  • 有时我可以这样做,但在我展示的示例中,我希望模板使用新选择的地图位置进行更新。我想使用这个模板而不必将新位置保存到数据库中。我想暂时设置属性,而不是保存属性。

标签: javascript meteor


【解决方案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') };
});

【讨论】:

  • 感谢您的想法。我不知道对象可以(或应该?)存储在Session 中。我试试看。
猜你喜欢
  • 2011-02-06
  • 2023-04-08
  • 1970-01-01
  • 2015-02-15
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多