Подтвердить что ты не робот

Meteor `Deps.autorun` vs` Collection.observe`

Каковы плюсы и минусы между использованием Deps.autorun или Collection.observe, чтобы синхронизировать сторонний виджет с реактивным Meteor.Collection.

Например, я использую jsTree для визуального отображения дерева каталогов, которое я сохранил в моем MongoDB. Я использую этот код, чтобы сделать его реактивным:

// automatically reload the fileTree if the data changes
FileTree.find().observeChanges({
  added: function() {
    $.jstree.reference('#fileTree').refresh();
  },
  changed: function() {
    $.jstree.reference('#fileTree').refresh();
  },
  removed: function() {
    $.jstree.reference('#fileTree').refresh();
  }
});

Каковы преимущества/недостатки использования этого метода против вызова Deps.autorun, который будет выглядеть примерно так: (untested)

Deps.autorun(function() {
  jsonData = FileTree.find().fetch();
  $.jstree.reference('#fileTree')({'core': {'data': jsonData} });
});

Это просто пример. Я прошу про плюсы и минусы вообще, а не для этого конкретного случая использования.

4b9b3361

Ответ 1

Deps.autorun, теперь Tracker.autorun - реактивный вычислительный блок. Принимая во внимание, что watchChanges обеспечивает обратный вызов, когда что-то меняется.

Когда вы используете Deps.autorun, весь блок в function() {...}, будет повторно запускаться каждый раз, когда реактивная переменная или документ изменяется вообще (обновляется, удаляется или вставляется) или любой другой изменение реактивной переменной.

Обратные вызовы watchChanges более точно настроены и запускают обратные вызовы для добавления, изменения или удаления в зависимости от запроса.

Основываясь на вашем коде выше, по сути оба одинаковы. Если у вас было больше реактивных переменных в блоке Deps.autorun, способ observeChanges сделать это был бы более эффективным.

В общем, первый стиль более эффективен, но по мере того, как ваш код стоит выше, они почти одинаковы и зависят от ваших предпочтений.