2015-01-23 4 views
1

Хорошая практика внесения изменений DOM из помощников метеора? В настоящее время я полагаюсь на функцию javascript, которая запускается внутри помощника Meteor, что заставляет функцию запускаться каждый раз при изменении данных коллекции.Метеор - внесение изменений в DOM от помощников

Я знаю, что есть Tracker.autorun(), но, насколько я знаю, Tracker.autorun() работает только для переменных Session и не работает для изменения данных коллекции.

Мои нынешние способы до сих пор не подвели меня или вызвали какие-либо проблемы, но я не уверен на 100%, если бы это было так, как Метеор предназначался для использования.

Пример кода

Template.page_body.helpers({ 
    orange: function() { 
     do_some_rand_function() 
     return this.name 
    } 
}) 

Этот код будет убедиться, что do_some_rand_function() побежал каждый раз this.name изменения (this.name переменная получила из Монго коллекции, поэтому реактивная).

+0

Кусочки кода помогут понять ваш вопрос! Возможно, вы захотите проверить, что такое реактивная переменная, что такое Session и что такое курсоры. –

ответ

5

Нет. Помощники не должны иметь побочных эффектов (например, вручную обновлять DOM, изменять базу данных, делать HTTP-запрос и т. Д.).

Ваше описание звучит как хороший пример использования для добавления template autorun в обработанном обратном вызове. Все автозапуска являются реактивными вычислениями, поэтому они будут повторно запущены, если какая-либо реактивная переменная, используемая в них, изменится (сеанс, Meteor.user, коллекции и т. Д.).

Дайте что-то вроде этого попробовать:

Template.myTemplate.onRendered(function() { 
    this.autorun(function() { 
    if (MyCollection.findOne()) { 
     do_some_rand_function(); 
    } 
    }); 
}); 

Также обратите внимание, что шаблон автозапуск автоматически прекращается, когда шаблон будет уничтожен.

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