Шаблон Meteor не обновляется при повторном запуске помощника шаблона

Я пытаюсь создать собственный мастер форм, который будет содержать различные шаги автоформирования в зависимости от определенных условий. Упрощенный пример meteorPad приведен ниже. Когда реактивный источник данных (переменная сеанса) изменяется, запускается реактивное вычисление (помощник шаблона), что подтверждается выводом консоли. Однако шаблон не обновляется и по-прежнему содержит то же количество шагов. Есть ли что-то, что мне нужно сделать, чтобы правильно обновить шаблон? Спасибо! http://meteorpad.com/pad/cPWShRiTKYpBaMahn/Leaderboard

html

<body>
  {{> basicWizard}}
  {{> changeSteps}}
</body>

<template name="basicWizard">
<!--shouldn't the steps variable update when the helper runs?-->
  {{> wizard id="basic-wizard" steps=steps}}
</template>

<template name="changeSteps">
 <button id="changeStepsButton"> change number of Steps </button>
</template>

клиентский код

Session.set('twoSteps', false);

information = new SimpleSchema({
  password: {
    type: String,
    label: 'password',
  },
});
confirm = new SimpleSchema({
  userName: {
    type: String,
    label: 'blah',
  },
});

Template.basicWizard.helpers({
    steps: function() {
      var ret = [];
      if (Session.get("twoSteps")) {
      ret[ret.length] = 
        {
          id: 'information',
          title: 'Information',
          schema: information,
        }
      }
      ret[ret.length] = 
        {
          id: 'confirm',
          title: 'Confirm',
          schema: confirm  ,
        }
      console.log("num steps: " + ret.length)
      return ret;
    }
  });

Template.changeSteps.events({
  "click #changeStepsButton": function (event) {
    Session.set('twoSteps', !Session.get("twoSteps")); 
  }, 
})

person jjr4826    schedule 03.05.2015    source источник
comment
Лично у меня метеорпад не загружается, постоянно находится в состоянии загрузки, а в консоли вижу коды ошибок 400 и 404. Возможно, это проблема моей локальной настройки (брандмауэр и т. д.), но не могли бы вы разместить свой код где-нибудь еще?   -  person Petr    schedule 03.05.2015
comment
Спасибо, что дали мне знать! Я добавил код к вопросу.   -  person jjr4826    schedule 03.05.2015


Ответы (1)


Похоже, проблема в том, что Мастер не обрабатывает шаги реактивно. Я подозреваю, что это следующий код в пакете Wizard:

Я думаю, что вызов «нового WizardConstructor» ниже, где реактивность нарушается: Template.wizard.created = function() { var id = this.data.id || идентификатор по умолчанию; this.wizard = wizardsById[id] = новый WizardConstructor(this.data); };

Где-то в конструкторе мастера он вызывает этот вызов: _.each(this.steps, function(step) { self._initStep(step); });

Но я не думаю, что Метеор знает, как воссоздать шаблон при изменении «this.data». Технически Мастер не привязан к «шагам», поэтому он не работает. Я подозреваю, что создатель пакета мастера не планировал использовать его таким образом.

person Paul Sainsbury    schedule 03.05.2015