0

誰かが私にこのことを説明できますか: ブラウザーのコンソールでコレクションからデータを取得している場合、それは正常に動作しますが、同時に (同じコレクションを使用する) テンプレートがレンダリングされると、クエリとして例外がスローされます結果は空です。私は何を間違っていますか?

Hubs = new Meteor.Collection("hubs");
Meteor.subscribe("hubs");
Template.thread.posts = function() {
    var hubName = 'foo',
        thread = Session.get("currentThread"),
        hub = Hubs.find({ name: hubName }).fetch()[0];
//throws: "Uncaught TypeError: Cannot read property 'threads' of undefined "
    return hub.threads[thread].posts;
}

//this being executed in browser's console yeilds an object:
Hubs.find({name: 'foo'}).fetch()[0]

ただし、同じコレクションを使用する他のテンプレートは問題なく動作します

4

1 に答える 1

1

Meteor が最初にブラウザーに読み込まれるとき、サーバーのコレクションからのデータはまだありません。

それらが利用可能になるまでに非常に短い時間がかかります。したがって、結果が提供されない場合を処理する必要があります。データが到着すると、リアクティブはすべてのテンプレートを新しいデータで更新する必要があります。

次のようなものを使用できます。

hub = Hubs.findOne({ name: hubName })
if(hub) return hub.threads[thread].posts;

findOneの短縮版ですfind().fetch[0]。したがって、結果がない場合、つまりnull何も返され.threadsず、読み取られないため、例外は発生しません。

于 2013-04-20T16:13:25.030 に答える