2012-11-14 9 views
5

メテオは、文書が変更されたときにビューをレンダリングします。特定のフィールドが変更されたときに再評価しないメテオール

Template.story.data = function() { 
    var storyID = Session.get('storyID'); 
    var story = Stories.findOne({ 
    _id: storyID 
    }) 

    if (!story) 
    return; 

    return story; 
}; 

ストーリーテンプレートのテンプレートヘルパーで、ストーリードキュメントからストーリーを取得します。

story.titleのようなフィールドが変更されたら、テンプレートを再レンダリングします。しかし、story.viewingusersのようなフィールドが変更されたら、私はテンプレートを再レンダリングしたくありません。とにかくそれが起こるようにするには?

問題の原因となった特定の問題は、パブリッシュ機能でこれらのフィールドを公開しないように設定することで解決しました。しかし、その解決策はあらゆる用途では機能せず、一般的な解決策が必要です。

+0

のtryテンプレートを保存しますか? – crapthings

+0

それでもデータは正しいですか?テンプレートが複数回レンダリングされないようにする理由はありますか?(最適化を超えて) –

+0

@TomColemanデータは正しいですが、私はポップオーバーとして表示されるインターフェイス要素を持っています。要素が再レンダリングされるたびにpopoverは破棄されます。それは本当に面倒です。 – Harry

答えて

3

あなたが探しているのは#constantテンプレートヘルパーです。

あなたのケースでは、一定のブロックにポップオーバーマークアップをラップし、story.rendered機能でそのブロックのコンテンツを手動で更新します。

したがって、このような何か:

story.html:

<template name="story"> 
    ... 
    {{#constant}} 
     <!-- Popover markup here --> 
    {{/constant}} 
    ... 
</template> 

client.js:

Template.story.rendered = function(){ 
    //Update logic here 
} 
+0

これはオプションですが、流星様式のロジックを崩壊させ、複雑さを増していますので、私はこの問題をより直接的に解決することを望んでいます。 – Harry

+0

うーん、私は流星風の論理については分かりませんが、私はこの技術を流星の「当事者」の例から学びました。あなたはその例を通して見ておくべきです、それはロジックの周りに自動回転をラップするので、更新ロジックは '流星様式でも無効にされます'。 –

+0

これは 'Meteor.render'を使うか、dom操作であなたのHTMLをビルドするよう強制します。いずれも素晴らしいことではありません。私は当事者の例を調べて、これは彼らがしていることです。これは機能します。レンダリングが遅くなり、テンプレートではなくJavaScriptがテンプレートコードに追加され、テンプレートをより細かく分割する必要があります。 3つすべてが複雑さを増し、物事を維持するのが難しくなります。しかし、私はこの点で、これは優れた有用な答えです、おかげさまです。 – Harry

関連する問題