Как стать автором
Обновить

Комментарии 19

Большое спасибо! Я думал там что-то более из ряда вон выходящее. А модели в ангуляре по такому же принципу работают? Или двойные биндинги по другому работают?
Модели ($scope) в AngularJS работают через dirty-checking. Это одна из причин, почему его так любят лишний раз пнуть.
В Angular2 будет поддержка реактивности и иммутабельных данных.
На самом деле в Метеоре всё несколько сложнее. Например, автозапускаемые функции исполняются не немедленно, а отложенно.
Да, но целью я ставил показать новичкам, что реактивность — это просто. В будущих статьях разберем реализацию реактивности так, как она сделана в метеоре от и до.
В таком случае её можно было бы реализовать ещё проще. Как в KnockoutJS, например.
Так и где обещанное? =))
Будет :) Пока времени на все не хватает.
Следующей статьей хотелось бы увидеть на примере этого же фреймворка как устроено локальное хранение коллекций, как и где они храниться?!)
Не более чем в памяти (сервера или/и клиента — смотря где созданы) за это отвечает minimongo
А что такое хипстерский по отношению к фреймворку?
Фреймворк для хипстеров. Это как, например, программистский.
Блин, смотрю в код, понимаю код, а понять принцип не могу, парадигма ломке не поддаётся… Либо я тупой, либо надо отдохнуть…
Смотри, у нас есть некие отслеживаемые данные и соответствующие действия, которые будут выполнены при изменении этих данных. При изменении данных, благодаря зависимостям возникает «волна» изменяющихся данных, которые переводят всю систему из одного состояния в другое, которое есть результат выполнения некоторых действий, например, выполнение формулы в табличном процессоре (Excel, Calc), расчет ипотечного кредита на сайте банка при каждом движении ползунка или изменении поля для ввода суммы кредита и т.п.

В данном случае в статье функция передаваемая в Tracker описывает то, какой процесс будет выполнен. При этом самое первое выполнение Tracker'а формирует эту динамическую систему (реактивное окружение), которое раскладывает все отслеживаемые данные и «соответствующие действия» по своим местам. И затем уже вызов метода set реактивной переменной с некоторым новым значением инициирует «волну» пересчета ипотечного кредита :) Как-то так.
Тут главное быть осторожным и не писать в трекере что-то типа:

isOpened.set( !isOpened.get() )

А то бесконечный цикл вам обеспечен :-)
Для этого можно дописать условие :)
Какое?
Например, такое:
// in ReactiveVar.prototype.set
if(Deps.vars[Deps.vars.length - 1].indexOf(this) > -1) {
  console.error('Error: Infinity loop');
  return;
}

Это не сработает на вложенных трекерах, но мы их и не рассматривали здесь. Таким образом, если в текущем окружении мы уже отслеживаем изменение переменной, то отменяем ее обновление и показываем соответствующее сообщение для разработчика.
Ну ок, для одного трекера проблему решили. А что будем делать с пинг-понгом между трекерами?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации