2016-08-16 3 views
1

Я новичок в meteor.js. Все еще привыкаешь к этому. Я понимаю, как шаблоны обновлений реактивно в соответствии с обновлениями курсора на сервере, как это:Реактивно вызвать функцию/событие js с meteor.js

{{#if waitingforsomething.length}} Something Happened! {{/if}} 

Это хорошо для отображения элементов на странице, обновление списков и содержание. Теперь, мой вопрос: что, если я хочу вызвать некоторый javascript или запустить какое-то событие, когда что-то обновится? Каким будет правильный способ сделать это с помощью meteor.js?

+2

Вы знаете, [ 'Tracker.autorun'] (https://github.com/meteor/docs/blob/ версия-NEXT/полная форма/tracker-manual.md)? – MasterAM

ответ

1

Все внутри Tracker.autorun или template instance this.autorun работает с изменениями в источниках реактивных данных внутри этих автозапуска.

Реактивные источники данных ReactiveVar экземпляры, Д.Б. запросы, Session переменные и т.д.

Template.myTemplate.onCreated(function() { 

    // Let's define some reactive data source 
    this.reactive = new ReactiveVar(0); 

    // And put it inside this.autorun 
    this.autorun(() => console.log(this.reactive.get())); 
}); 

Template.myTemplate.events({ 
    // Now whenever you click we assign new value 
    // to our reactive var and this fires 
    // our console.log 
    'click'(event, template) { 
    let inc = template.reactive.get() + 1; 
    template.reactive.set(inc); 
    } 
}); 
1

Немного устаревшее, но Sacha Greif's Reactivity Basics - очень быстрое и краткое введение в модель реактивности метеор.

В принципе, у вас есть то, что называется reactive computations, код, отслеживающего специальные объекты данных (sessions, subscriptions, cursors и т.д.) и запускается на выполнение, когда любой из этих reactive sources изменений.

Это подвергается через Tracker API

0

вычислений работает довольно хорошо для меня:

Template.myTemplate.onRendered(function() { 
     this.computation = Deps.autorun(function() { 
      if (something) { 
       $(".reactive").html("Something Happened!"); 
      } 
     }); 
    }); 

Template.myTemplate.destroyed = function(){ 
    if (this.computation){ 
     this.computation.stop() 
    } 
}; 

Я надеюсь, что это помогает.