基本的には、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
属性の値を取得するにはどうすればよいですか?
:これを(
findOne
がfetch()[0]
の省略形です)試してみてください。このメソッドは、テンプレート指向ではない他のコードによっても呼び出されており、obj && obj.resultを返すとエラーになりますか?あなたはそのケースをどのように扱いますか?私はこれに就いていて、私がする必要がなければ別のスレッドを開きたくありません。 –これはどのようなユースケースですか?おそらく、テンプレートはメソッドを呼び出すべきではありません。画面が再描画されるたびに、サーバーへの往復を行います。 Meteorのアプローチは、テンプレートを駆動するデータを購読して、スクリーン描画によってそのラウンドトリップの遅延を補うことです。 – debergalis
無視して、これを編集しなければならなかった、間違った答え。私はそれを試みます。しかし、私がしようとしているのは、コードの重複を減らすことです。 Template.this.that = function(){var obj = myObject.myMethodGetData(Session.get( "search_value")); objを返します。 };そのデータを取得するために他のコードがmyObject.myMethodGetDataを呼び出すことを許可します。 –