Как я могу запустить шаблон#onRendered, когда Blaze повторно использует шаблон?

Как я могу запустить шаблон#onRendered или эквивалентный, когда Blaze повторно использует шаблон?

У меня есть виджет jQuery UI selectmenu, основанный на <select>элементе, <option>дети которого создаются с помощью {{#each}}(нацелены на помощника, который обращаетсяSession, чтобы получить реактивность) и шаблон Blaze. Я освежаю selectmenu onrended.

  • Шаблон Blaze является правильным. ( <option>{{text}}</option> )
  • Session is getting changed (checked with both console.log()and manually setting it in the browser console.
  • Сессия реактивности, помощник, и {{#each}}работают (проверка скрытых <select>показывает, что его параметры были правильно обновлены)

Это просто шаблоны, которые получают повторно, так хотя все работает нормально до тех пор, пока Session параметры контексте изменений, чтобы иметь больше вариантов (onRendered() вызывается после того, как новый шаблон создаем экземпляр), в jQuery пользовательского интерфейса selectmenu является неточной (не в курсе текущего состояния контекста) если Session параметры контекста меняется на такую же или меньшим количеством вариантов (меньше вариантов только звонков onDestroyed() и такое же количество вариантов даже не сделать это).

1 ответ

  1. Решение: Tracker.afterFlush(callback)используется внутри помощника (который вызывается каждый раз, когда я ожидал) вместо Tempate.на что угодно.)(_]

    https://docs.meteor.com/api/tracker.html#Tracker-afterFlush

    например.

    myContextOptionsHelper: function () {
      let context = Session.get('myContext');
      let contextOptions = app.client.tempdata.contextOptions[context];
      Tracker.afterFlush(() => {
        if ($('#mySelectmenu').is(':ui-selectmenu')) {
          $('#mySelectmenu').selectmenu('refresh');
        }
      });
      return contextOptions;
    }