2

サーバーコレクションをクライアントコレクションと同期しようとしています。

サーバー上:

var JobLoopUsers = new Meteor.Collection("job-loop-users")

Meteor.publish("user-data", function(){
  JobLoopUsers.findOne({meteorUserId : 1});
});

クライアントの場合:

Meteor.subscribe("user-data");

JobLoopUsers = new Meteor.Collection("job-loop-users");

meteor.callを使用してサーバーにテストデータを挿入します

私がするときのサーバー上

console.log( JobLoopUsers.find().fetch()[0] )

表示されます:

 {meteorUserId: 1
   testData: "My Test Data Here"}

私がする時

console.log( JobLoopUsers.find().fetch())

クライアントでは、空の配列を取得します。

これら2つのコレクションを同期するにはどうすればよいですか?

流星ドキュメントは言う:

レコードセットをサブスクライブすると、サーバーにレコードをクライアントに送信するように指示されます。クライアントは、これらのレコードを、設定するコレクション引数と同じ名前でローカルのMinimongoコレクションに保存します。Meteorは、一致するコレクション名を使用してクライアントでMeteor.Collectionを宣言するまで、着信属性をキューに入れます。

自動サブスクライブを行う必要がありますか?

4

2 に答える 2

2

これら2つはリアルタイムで自動的に同期されます。発生している可能性があるのは、挿入しているデータにがmeteorUserId:1なく、クライアントに公開されていないことです。また、レコードがあるかどうかに関係なく、すべてのレコードを検索してmeteorUserId:1います。

これを修正するには、次のことを試して変更してください。

Meteor.publish("user-data", function(){
  JobLoopUsers.find({});
});

何らかの理由でサブスクリプションを変更する必要がない限り、自動サブスクライブを行う必要はありません

また、電話console.log( JobLoopUsers.find().fetch())が早すぎる可能性があります。1〜2秒待ってから、次のように置き換えてください。

Meteor.setTimeout(function() { console.log( JobLoopUsers.find().fetch()) }, 3000);
于 2013-02-02T06:48:37.523 に答える
1

ここのチュートリアルに従うことは、私の問題を解決するのに役立ちました:http: //andrewscala.com/meteor/

動作しているようです。

Global.js:

JobLoopUsers = new Meteor.Collection("user-data");

Client.js:

Meteor.autosubscribe(function (){
  Meteor.subscribe("user-data", Meteor.userId())  
})

Server.js:

Meteor.publish("user-data", function(userId){
  return JobLoopUsers.find({meteorUserId: userId})
})
于 2013-02-02T20:25:23.833 に答える