1

私が Meteor で気に入っていることの 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')) };
});

また、地図を編集しているときは、緯度と経度がデータベースから読み取られ、適切にレンダリングされます。

しかし、ユーザーが新しい地図の原点を選択し、新しい地図の原点を保存せずにテンプレートを更新できるようにしたいと考えています。ユーザーにマップをクリックしてもらい、それを使用してコレクションclient-sideを更新し、テンプレートを更新します。しかし、ユーザーが具体的にクリックして、新しい緯度と経度をサーバーに保持してもらいたいsaveです。このようなことは Backbone では簡単ですが (とは区別されます)、Meteor では簡単ではないようです。setsave

これらの状況に対処するための優れた戦略を持っている人はいますか?

4

1 に答える 1

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') };
});
于 2013-03-24T16:09:28.893 に答える