2016-07-10 4 views
0

ボタンのクリックでモーダルを開閉しようとしています。流星の開閉モーダル

私の現在のテンプレートは次のようになります。

<template name="Nav"> 
    {{#if currentUser}} 
    <button class="settings_toggle"> 
     {{email}} 
    </button> 
    {{#if settingsMode}} 
    <div class="settings_modal"> 
     <a href="/create">Your Menus</a> 
     <a href="" class="log_out">Sign Out</a> 
    </div> 
    {{/if}} 
    {{else}} 
    <button class="log_in_toggle"> 
     Sign In 
    </button> 
    {{#if loginMode}} 
    <div class="loginModal"> 
     {{> atForm}} 
    </div> 
    {{/if}} 
    {{/if}} 
</template> 

、対応の.jsには、私は必要なヘルパーやイベントに設定したファイル:今

Template.Nav.onRendered(function(){ 
    Session.set('settingsMode',true); 
    Session.set('loginMode',true); 
}); 

Template.Nav.helpers({ 
    loginMode(){ 
    return Session.get('loginMode'); 
    }, 
    settingsMode(){ 
    return Session.get('settingsMode'); 
    } 
}); 

Template.Nav.events({ 
    'click .settings_toggle'(event){ 
    Session.set('!settingsMode'); 
    }, 
    'click .log_in_toggle'(event){ 
    Session.set(!'loginMode'); 
    } 
}); 

Template.Nav.events({ 
    'click .settings_toggle'(event){ 
    Session.set('!settingsMode'); 
    }, 
    'click .log_in_toggle'(event){ 
    Session.set(!'loginMode'); 
    } 
}); 

を、私がためであると仮定私の限定された知識のjavascriptのですが、どうすれば適切に動作するようになるので、.log_in_toggleをクリックすると、loginModeをtrueに設定し、その逆に設定します。

+0

あなたのプロジェクトにブートストラップはありますか? – Luna

+0

@ルナ私は、なぜですか? – PaulVO

+0

それは非常に単純なモーダルを持っていますが、必要はありません。あなたはjQueryを持っていますか? – Luna

答えて

2

jQueryがあるので、クリックイベントの要素を簡単に表示/非表示できます。私はここにセッションを持つ理由は見当たりません。

イベント:あなたのCSSで

'click .settings_toggle': function(){ 
    //Shows a hidden element 
    $('.elementClass').show() 
} 

'click .close_modal': function(){ 
    //Hides element 
    $('.elementClass').hide() 
} 

は、モーダルの両方は、それらが見えるようになりますjQueryの.show()としてdisplay: none;を持っています。

.onRendered()のヘルパーでは、すでに{{#if currentUser}}をチェックして正しい要素を表示しているため、モーダルは最初CSSで非表示になり、クリックイベントで表示されるため、セッションを消去するだけです。

EDIT

はさらに、次の2つのTemplate.Nav.events({})を持っています。あなたはそれをすることはできません。

+0

乾杯!私が '.settings_toggle'をクリックすると、' .hide() 'の要素と' .show() 'のための要素が必要になるのではなく、表示されているか表示されていないかを切り替えるように設定できます。 '? – PaulVO

+0

心配しないで! '.toggle()'はそれを正確に行います。 – PaulVO

+0

.hide()または.show()の代わりに.toggle() – Luna