31

私のアプリケーションにある種のアイテムのリストがあり、ユーザーがリストに新しいアイテムを挿入できるとします。

Meteorが通常行うことは、ユーザーがリストにアイテムを挿入すると、サーバーの確認を待たずに、すぐにブラウザーに表示されることです。

私が欲しいのは、アイテムがこの状態にあるとき(送信されたがサーバーによってまだ確認されていないとき)、リスト内の正しい位置に表示されますが、グレー表示されます。

Meteorにこれを行わせる方法はありますか?

4

2 に答える 2

38

もちろん。挿入を行うメソッドを作成します。メソッドを実行するときに、シミュレーションで実行されているかどうかを確認し、実行されている場合は、挿入されたアイテムに「一時的」または「未確認」フラグを設定します。これを使用して、アイテムをグレー表示にするかどうかを決定します。

MongoDBを使用していると仮定します。

// Put this in a file that will be loaded on both the client and server
Meteor.methods({
  add_item: function (name) {
    Items.insert({name: name,
                  confirmed: !this.isSimulation});
  }
});

メソッドの呼び出し:

Meteor.call("add_item", "my item name");

それがあなたがする必要があるすべてです。これが機能する理由は、サーバーがアイテムの保存を完了すると、クライアントでのローカル(シミュレートされた)変更がバックアウトされ、サーバーで実際に発生したもの(「未確認」フラグは含まれません)に置き換えられるためです。

上記はそれを行う最も簡単な方法ですが、データベース内のすべてのレコードが「確認済み」のtrueの属性を持つことになります。これを回避するには、falseの場合にのみ確認済み属性を設定します。

isSimulationおよびの詳細については、ドキュメントのこの部分を参照してください。Meteor.methods

于 2012-04-10T03:49:39.017 に答える
1

これは私がサーバー側にオブザーバーを追加したものです。サーバーが更新を受信すると、通知をtrueにし、クライアントが同じように更新されると、クライアント側からnotifyfalseという変数を作成しました。

Collection.find({"notify":false}).observe({ 
    "added" : function(first){ 
        collection.update({"_id":first._id},{$set : {"notify":true}}); 
    }
});
于 2013-12-11T11:45:56.400 に答える