2016-11-04 21 views
0

私は2つのタブ間のメインパネルでコンテンツを切り替えるために反応VARを使用しようとして流星に働いています。私は自分自身でコンテンツをテストすることができたので、問題が反応するvarコードにあると確信しています。具体的には、問題はtab:function()だと思っていますが、多くの検索とドキュメントの読み込みの後、解決策が見つかりませんでした。流星の単純な反応VAR

関連JS:

Template.content.onCreated(function() { 
    this.currentTab = new ReactiveVar('form'); 
}); 

Template.content.helpers({ 
    tab: function() { 
     return Template.instance().currentTab.get(); 
    } 
}); 

Template.content.events({ 
    'click .nav li': function (event, template) { 
     var currentTab = $(event.target).closest("li"); 

     currentTab.addClass("active"); 
     $(".nav li").not(currentTab).removeClass("active"); 

     Template.currentTab.set(); 
    } 
}); 

関連のhtml:

<template name ="content"> 
    <ul class ="nav"> 
     <li data-template="form"><a href="#">Form</a></li> 
     <li data-template="results"><a href="#">Results</a></li> 
    </ul> 
    {{ > Template.dynamic template=tab}} 
</template>   

答えて

0
{{ > Template.dynamic template=tab}} 

これは、表示したいテンプレートの名前である文字列を取得するためにtabヘルパーを呼び出していますここに。 currentTabの値を "form"に設定することで、最初から作業する必要があります。

が示されますテンプレートを変更するには、新しいテンプレートの名前と一致する文字列に currentTabの値を変更する必要があります。あなたはそれをしていない。

Template.currentTab.set(); 

ここでこれを行う必要があります。代わりに、あなたは、私が存在するとは思わないTemplatecurrentTab性質上set()を呼んでいます。 Templateは大文字のTはMeteorオブジェクトであり、あなたが参照しようとしているテンプレートインスタンスではありません。 currentTabの新しい値を設定するには、実際に値を指定する必要があります。これと同じように:

Template.content.events({ 
    'click .nav li': function(event, instance) { 
     //logic to decide which template you want to show 
     //and put the name of that template in templateName 

     instance.currentTab.set(templateName) 
    } 
}); 
+0

ありがとうございました!それははるかに理にかなっています。まだ完全には動作しませんが、それをより良く理解するのに役立ちます。 あなたはそれが最初に動作するはずです、それはナビゲーションバー以外のものを示したことがないと言います。私がフォームや結果のテンプレートを手動で入力すると動作しますが、タブを使用すると動作しません。どんな洞察? –

+0

'Template.dynamic'のどこに表示されると思われる" form "という名前のテンプレートがありますか? – RevMen

関連する問題