2015-04-11 4 views
1

Обратитесь к следующему коду:Helper визуализатор внутри, если заявления

Template.EditProfile.helpers({ 
    'welcomeMessage': function() { 
     if (Session.get("welcomeMessage")) { 
     var welcomeMessage = Session.get("welcomeMessage"); 
     delete Session.keys['welcomeMessage'] 
     return welcomeMessage; 
     } else { 
     return false; 
     } 
    } 
    }) 

В HTML

{{#if welcomeMessage}} 
     <div class="change-explain red-msg">{{ welcomeMessage }}</div> 
    {{else}} 
     <div class="change-explain">People will see your username on your comments.</div> 
    {{/if}} 

Это всегда делает ничего. Если я принимаю внешние инструкции, это работает нормально. Что мне здесь не хватает об реактивном стиле?

ответ

2

В Meteor переменная Session сама по себе является реактивной, а это означает, что при изменении значения переменной сеанса «welcomeMessage» ваш помощник «welcomeMessage» снова запустится и ничего не отобразит. Для того, чтобы дать ему тест, закомментируйте delete Session.keys['welcomeMessage'] и в то время как ваше приложение работает, установите сеанс вручную в консоли, набрав что-то вроде Session.set('welcomeMessage', "test"), а затем Session.set('welcomeMessage')

Если вы хотите установить класс на основе от этой переменной сеанса вы могли добавить помощника, как:

'getClass': function() { 
    var className = ""; 
    if (Session.get("welcomeMessage")) 
     className = 'red-msg'; 
    return className; 
} 

и помощник сообщение как:

'getMessage': function() { 
    var messsage = "People will see your username on your comments."; 
    if (Session.get("welcomeMessage")) 
     messsage = Session.get("welcomeMessage"); 

     return messsage; 
} 

, а затем ваш HTML будет выглядеть так:

<div class="change-explain {{getClass}}">{{getMessage}}</div> 
+0

Спасибо! Тогда как мне изменить код, чтобы добавить класс 'red-msg', только когда' welcomeMessage' не определено? –

+0

Добавлено в ответ :) – Jon

Смежные вопросы