2015-08-13 6 views
0

Цель состоит в том, чтобы динамически отображать кнопки в событии кликов. При нажатии кнопки редактирования отображаются кнопки сохранения и отмены. При нажатии кнопки «Отмена» кнопка редактирования должна отображаться обратно, которая не работает. Я использую сессию в помощнике.Meteor + Blaze: если блок else в шаблоне пробелов не выполняется во второй раз

template.html

<head> 
    <title>ifelse</title> 
</head> 

<body> 
    <h1>Welcome to Meteor!</h1> 

    {{> hello}} 
</body> 

<template name="hello"> 
    {{isEdit}} 

    {{#if isEdit}} 
     <div class="saveCancelBtnBarLogic"> 
      <button class="button">Save</button> 
      <button class="cancelEditLogic button">Cancel</button> 
     </div> 
     {{else}} 
     <button class="editDishButtonLogic button">Edit</button> 
    {{/if}} 
</template> 

template.js

if (Meteor.isClient) { 

    Template.hello.events({ 
     "click .editDishButtonLogic": function(event, template) { 
      console.log("edit true"); 

      Session.set("isEditSession", "true"); 
     } 

    }); 

    Template.hello.events({ 
     "click .cancelEditLogic": function(event, template) { 
      console.log("edit false"); 
      Session.set("isEditSession", "false"); 
     } 
    }); 

    Template.hello.helpers({ 
     isEdit: function() { 
      console.log("edit helper : " + Session.get("isEditSession")); 
      return Session.get("isEditSession"); 
     } 
    }); 
} 

Проект также развернут @http://ifelse.meteor.com для справки.

+0

это потому, что изменение 'isEdit' не повторно отображает шаблон. Загляните в [template_autorun] (https://docs.meteor.com/#/full/template_autorun) и пользовательские «реактивные переменные», чтобы повторно отобразить шаблон при обновлении переменной сеанса. –

+0

@ guranjan-singh Не уверен, почему он работает в первый раз. При нажатии кнопки редактирования кнопки сохранения и отмены отображаются с использованием той же логики и переменной сеанса. Однако при нажатии кнопки отмены она не работает. Кроме того, переменные сеанса являются реактивными. Этот пример не включает пользовательские переменные. – roray

ответ

1

Постановили:

Изменена строку ниже: Session.set("isEditSession", "false");

так:

Session.set("isEditSession", false);

ложь является булевой здесь - обратите внимание, что ложь не в кавычках больше. Спасибо benjick, который ответил на него здесь @https://forums.meteor.com/t/if-else-block-in-spacebars-template-not-executing-for-the-second-time/8388/2

+1

Хорошее пятнистое - я как раз собирался опубликовать это, если бы я сделал это в консоли, это сработало бы: 'Session.set (« isEditSession », true); Session.set ("isEditSession", false); ' Так что это определенно реактивный, как и должно быть. Это просто, что строка «false» на самом деле «правдивая» (как в ней действует как «истинное» значение), поэтому «isEdit» всегда был true, как только была установлена ​​переменная сеанса. –

+0

Вы правы. Мое первое впечатление (в комментариях) было неправильным. Строковое значение всегда истинно. Он работает впервые, потому что в это время переменная сеанса не задана и ее 'undefined', которая переводится как false. –

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

  • Нет связанных вопросов^_^