2012-04-10 2 views
31

私のアプリケーションには何らかの種類の項目のリストがあり、ユーザーは新しい項目をリストに挿入できます。メテオでは、新しく挿入されたデータがサーバによって確認されるまで、どのように灰色で表示されるのですか?

Meteorは通常、ユーザーがリストに項目を挿入すると、サーバーの確認を待つことなく、ブラウザにすぐに表示されます。

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

メテオでこれを行う方法はありますか?

答えて

38

です。挿入を行うメソッドを作成します。メソッドが実行されると、シミュレーションで実行されているかどうかをチェックし、そうであれば、挿入された項目に '一時的な'または '未確認の'フラグを設定します。これを使用して、項目をグレー表示するかどうかを決定します。

// 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"); 

あなたがする必要があるすべてだあなたはMongoDBのを使用していると仮定すると、

。これが動作する理由は、サーバーがアイテムの保存を完了すると、クライアント上のローカル(シミュレートされた)変更がバックアウトされ、サーバー上で実際に発生したもの( 'unconfirmed'フラグは含まれません)に置き換えられます。

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

私は一度、クライアント側自体 から偽の通知という変数を作成した程度isSimulationMeteor.methods

+1

this.isSimulationの代わりにMeteor.isClientを使用した場合は違いがありますか? –

+0

[This SO Answer](http://stackoverflow.com/a/27315009/302898)は、isClientとisSimulationの違いに対処しています。短い答え:ここで 'isSimulation'を使うべきです。 – Sean

1

これは、私は、サーバー側のオブザーバーを追加しました何で、 詳細については、ドキュメントのこの部分を参照してください。サーバは、それが真に通知するudpateを受信し、クライアントは同じに更新されます。

Collection.find({"notify":false}).observe({ 
    "added" : function(first){ 
     collection.update({"_id":first._id},{$set : {"notify":true}}); 
    } 
}); 
関連する問題