0

クライアントで何かをする場合

Foo.insert({blah : 1})

ここでは Meteor コレクションです。これは実際には、 http: //docs.meteor.com/#meteor_methods の最後の段落に記載されているように、クライアントとサーバーの両方でコードを実行するFooMeteor.method 呼び出しをトリガーします。

ただし、同じことを行うメソッドを (クライアントとサーバーで) 定義するとします。

Meteor.methods({
  bar: function() { 
    Foo.insert({blah : 1}) 
  }
});

今、私はクライアントでこれをトリガーします

Meteor.call("bar");

Foo.insertメソッドの結果として、クライアントとサーバーの両方で呼び出されるようになりました。insertしかし、それ自体がメソッドであるため、クライアント側の の呼び出しは、サーバーを再度呼び出さないことをどのように認識しているのでしょうか?

さらに、標準的なサーバー側のレイテンシー補償呼び出しとその結果の同期を自動的にトリガーせずinsertに、クライアント側で呼び出す方法はありますか? (なぜこれをやりたいのかについては、Loading a Meteor client app with fake fire-and-forget data を参照してください)

4

1 に答える 1

1

クライアント側のものは「スタブ」になります。このisSimulationプロパティ セットがあり、レイテンシ補正のためにデータが挿入されているかのように見えます。

クライアントでa.methodが実行されている場合、レイテンシー補正は常に有効になっており、データベースに入るべきではないと思います。したがって、クライアント側のメソッドで実行されているものはすべて「偽の」タイプのシミュレーションになります

に設定しようとするthis.isSimulationfalse、クライアント側の挿入が挿入でエラーをスローし始めたことを示す奇妙なエラーが発生します。

偽のシミュレーションでそれを実行する方法がよくわかりません。var dothis = function() {...}他のメソッドタイプのメソッドで実行する必要があると思います。

この「偽の火」を行い、忘れてクライアント側のみのデータを取得するには、これが私が推測するものです(間違っている場合は修正してくださいので、答えを変更_collectionしてください)クライアント側のメソッドでプロパティを変更します。

たとえば、持っている場合

mydata = new Meteor.Collection("something");

function something() {
    mydata.insert({..});
}

代わりにこれを行うようにメソッドを変更します

mydata._collection.insert({..});

これにより、データがサーバーに同期されないことが保証されますが、ローカル コレクションにはこの「偽のデータ」が含まれます。

お役に立てれば!

于 2013-10-22T20:51:32.950 に答える