0

自動購読をアンインストールし、流星アプリを再起動しました。それ以来、クライアント上のコレクション データにアクセスできませんでした。

空の配列の戻り値に関連するすべての質問は、同じ答えになります。サブスクライブされたデータはまだ利用できません。しかし、どれだけ待っても、クライアントにデータが表示されません。

サーバ:

Meteor.startup(function () {
  Meteor.publish("states", function () {
    return states.find();
  });
});

states.find().fetch()サーバーにログオンすると、期待どおりに状態が吐き出されます。

クライアントで:

Meteor.subscribe("states", function(){
  console.log(states, states.find(), states.find().fetch());
});

statesstates.find()期待どおりにオブジェクトを返し、 を返し.fetch()ます[]

(数分でも) 待ってstates.find().fetch()から、ブラウザ コンソールで実行すると、[]静止状態になります。

考え?

編集

コレクションは isServer/isClient ブロックの外で宣言されます (スキーマを利用するため)。

states = new Meteor.Collection("states");
4

1 に答える 1

7

スタートアップでデータを公開しているため、取得していると思いますが[]、準備ができていない場合は、そのサブスクライブを反応的にしましょう。

Tracker.autorun(function(){
   Meteor.subscribe("states", function(){
      console.log(states, states.find(), states.find().fetch());
   });
});

オプション

isServer/isClientif ステートメント内でコレクションを宣言する理由はありません。

グッドプラクティス(insecure/autopublishパッケージの削除)から始めているので

フォローをしましょう。

最初にフォルダ構造を作成します。( meteor/structuringyourappとこのSOを確認してください)。

appName/lib/collection.jsこのコードを中に入れます。

states = new Meteor.Collection("states");
//optional you can place this subscribe inside the appName/client/main.js
if(Meteor.isClient){
   Meteor.subscribe("states", function(){
      console.log(states, states.find(), states.find().fetch());
   });
}

そしてappName/server/publish.js

Meteor.publish("states", function () {
    return states.find();
  });
于 2015-03-06T02:29:09.970 に答える