2016-11-02 2 views
0

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

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

  • Правильный шаблон Blaze. (<option>{{text}}</option>)
  • Session становится изменен (проверено с обеими console.log() и вручную установить его в консоли браузера.
  • Session реактивность, помощник и {{#each}} работает (инспектирование скрытые <select> показывает, что его параметры были правильно обновлены)

это просто, что шаблоны становятся повторно, так что, хотя все работает прекрасно, пока изменения Session параметры контекста, чтобы иметь больше возможностей (onRendered() вызывается после того, как новый экземпляр шаблона создается), то selectmenu JQuery UI является неточно (несовместимо с курсом nt контекста), если контекст Session изменен, чтобы иметь одинаковое или меньшее количество опций (меньшее количество опций вызывает только onDestroyed(), и такое же количество параметров этого не делает).

ответ

0

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

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; 
}