2015-04-18 2 views
3

Я хочу, чтобы решить следующую проблему Meteor.js:Метеор реактивная функция для обновления шаблонов

У меня есть HTML-элемент, который появляется в шаблоне, только если пользователь вошел в систему: {{#if currentUser}} <input ...> {{/if}}. После появления элемента HTML мне нужно выполнить команду JS на нем. Таким образом, мне нужен какой-то обратный вызов, который происходит после Шаблон обновлен. Как достичь этого?

Ни один из реактивных источников данных я знаю не сделать трюк в этом случае, как, например, Meteor.user() источника триггера зависимостей перед тем обновляются в шаблоне. Также см. Мой предыдущий вопрос here.

+0

Почему бы просто не использовать крючок для входа в систему? http://docs.meteor.com/#/full/accounts_onlogin не будет работать, или это еще до обновления шаблона? –

+0

Да, действительно, это тоже срабатывает - я тоже пробовал. –

ответ

3

Рефакторинг кода вашего шаблона для размещения содержимого вспомогательного блока {{#if}} внутри дочернего шаблона, который получит собственное событие жизненного цикла onRendered, которое запускается только при выполнении обоих условий, а новый подразумеваемый текст HTML вставляется в DOM.

HTML

<template name="parentTemplate> 
    {{#if currentUser}} 
    {{> childTemplate}} 
    {{/if}} 
</template> 

<template name="childTemplate"> 
    {{! whatever}} 
</template> 

JS

Template.childTemplate.onRendered(function(){ 
    // here you go 
}); 
+0

приятно! прекрасно работает! –

0

Я хотел бы добавить необходимый код в autorun.

Template.mytemplate.onRendered(function() { 
    Tracker.autorun(function() { 
    user = Meteor.user() 
    if (user) { 
     // Your code here 
    } 
    } 
} 
+0

nope! Это, как я объяснил в своем посте, не работает! Как объяснялось, «реактивный источник» Meteor.user() запускает автозапуск до того, как шаблон обновлен, и, следовательно, код JS, который мне нужно запустить на вставленном элементе DOM, терпит неудачу. –

+0

Не могли бы вы показать, как выглядит ваше onRendered с автозапуском и вашим шаблоном? – Jaro

+0

'onRendered' содержит мой код JS, который я хочу запустить на' input'. Так же работает мой ответ «autorun» вместе с 'if (Meteor.user()). Обратный вызов 'autorun' определен в глобальной области видимости, но я протестировал его, добавив« предупреждение », и он действительно запущен, но jQuery, который я использую внутри обратного вызова, не находит поле« input », которое появляется только после этого. –

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

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