流星テンプレートヘルパー関数内で、find
とfetch
の結果を返した場合、パフォーマンス、再レンダリングの数、またはその他に違いはありますか?
たとえば、検索アプローチ:
Template.players.topScorers = function () {
return Users.find({score: {$gt: 100}}, {sort: {score: -1}});
};
またはフェッチを追加します。
Template.players.topScorers = function () {
return Users.find({score: {$gt: 100}}, {sort: {score: -1}}).fetch();
};
検索のみのアプローチは現在 docs にあるものですが、fetch
を使用している他の多くの人々を見てきました。
はいあります。
フェッチを使用すると、クエリ結果セット全体への依存関係をその場で登録できます。 find
を使用し、後で{{#each}}
を使用して反復することにより、依存関係がすべてのドキュメントに個別に登録されます。したがって、1つのドキュメントが変更されると、関連するコードのみが再レンダリングされます。 fetch
を使用する場合、結果セット内のドキュメントを変更すると、fetch
を使用したスコープ全体が再レンダリングされます。
小さな結果セットの場合、違いはありません。頻繁に変更される大きなセットの場合、計算が遅くなり、望ましくない視覚的なアーティファクトが発生する可能性があります。
私はそれを理解するのに役立つかもしれない 投稿 を書きました(それはあなたの質問に直接答えませんが)
これは、OodlesTechnologiesで従うものです。
ヘルパーを定義するには、たとえばテンプレート名がallInventoryの場合、テンプレートjsファイルに移動するだけなので、allInventory.jsファイルに移動して、ヘルパーを次のように記述します。
Template.allInventory.helpers({
})
このヘルパー内に、データベースやセッション、または他のサービスからデータを取得するためのロジックを配置し、それをhtmlで使用する関数を作成します。
Template.allInventory.helpers({
productDetails: function() {
return Session.get('dbData');
}
})
On html side you just need to use the function name as follows:-
{{#each productInfo in productDetails}}
<div class="imgb"><img src="{{productInfo.image_url}}"></div>
{{productInfo.item_name}}
{{productInfo.seller_sku}}
{{productInfo.quantity}}
{{productInfo.price}}
<a type="button" class="full-view text-success"><i id="fullView" data="{{productInfo._id}}" class="fa fa-eye"></i></a>
{{/each}}
上記のproductDetailsでわかるように、Htmlでレンダリングするデータを取得するヘルパークラスの関数名には、その名前を介して直接アクセスでき、htmlテンプレートの各ループを介してトラバースできます。