2012-04-16 14 views
2

基本的には、MongoDB find()呼び出しによって返されたドキュメントのresult属性を持つテンプレートをレンダリングしようとしています。私は自己申告しています。メテオレンダリングテンプレートとコレクションからのドキュメント

私はHTMLテンプレート

<template name="results"> 
    status: {{result}} 
</template> 

を持っていると私は、JSファイルでそれをレンダリングしようとしている:

if (Meteor.is_client) { 
    Template.results.result = function() { 
     return Results.find({'type': 'test'}).fetch()[0].result; 
    } 
} 

モンゴ{type: "test", result: "success"}のレコードがあります。このコードでは、「未定義には属性結果がありません」というエラーが発生し続けます。しかし、私がちょうどResults.find({'type': 'test'}).fetch()[0]を返すと、実際には未定義ではないオブジェクトが返されます(コンソールにログすると、設定したresult属性があることがわかります)。

私が考えることができるのは、流星の反応的な動作に関連している可能性があることです.MongoDBの呼び出しは、最初は未定義に戻っていて、後で正しい文書を含むように更新しています。あれは正しいですか?もしそうなら、その文書のresult属性の値を取得するにはどうすればよいですか?

答えて

4

クライアントが起動するとすぐに、サーバーが結果でドキュメントを送信する前に、テンプレートがレンダリングされます。あなたのfindOneがメソッドの内部にあるとTemplate.this.thatは、メソッドを呼び出している場合はどのような

Template.results.result = function() { 
    var obj = Results.findOne({'type' : 'test'}); 
    return obj && obj.result; 
} 
+0

:これを(findOnefetch()[0]の省略形です)試してみてください。このメソッドは、テンプレート指向ではない他のコードによっても呼び出されており、obj && obj.resultを返すとエラーになりますか?あなたはそのケースをどのように扱いますか?私はこれに就いていて、私がする必要がなければ別のスレッドを開きたくありません。 –

+0

これはどのようなユースケースですか?おそらく、テンプレートはメソッドを呼び出すべきではありません。画面が再描画されるたびに、サーバーへの往復を行います。 Meteorのアプローチは、テンプレートを駆動するデータを購読して、スクリーン描画によってそのラウンドトリップの遅延を補うことです。 – debergalis

+0

無視して、これを編集しなければならなかった、間違った答え。私はそれを試みます。しかし、私がしようとしているのは、コードの重複を減らすことです。 Template.this.that = function(){var obj = myObject.myMethodGetData(Session.get( "search_value")); objを返します。 };そのデータを取得するために他のコードがmyObject.myMethodGetDataを呼び出すことを許可します。 –