грубо говоря у тя биндинг не автоматический, у меня там где html вьюха пытается свойство какое то читать, автоматически вешается Object.observe() если он поддерживается, сеттер если он поддерживается, а если и он не поддерживается то вешается ватчер дирти чекинг. Если же 10 {{Выражений}} пытаются отслеживать одно свойство, то к тому свойству просто добавляется хендлер, а не вешается еще один обсервер или сеттер(ну 2 геттера и так не повесить)
когда же все ватчеры отменены или переведены в спящий режим (например когда какой-то елемент display:none ватчеры автоматически засыпают), то все обсерверы снимаются, ну или если это долго (если снятие всех сеттеров и замена их на обычное значение заняла больше 17 миллисекунд) то снятие прекращается и ватчеры просто переходят в режим игнорирования сеттеров.
я к тому что этим дожлен вреймфорк заниматься а не человек, а у тебя это не автоматизировано, ну и бред.
смысл юишки в том что я пишу в html как на html, а в javascript как в javascript. А как оно там все соединяется решает фреймворк, я об этом вообще не думаю, максимум это во время верстки какие-то данные из яваскрипта подцеплю где они мне нужны. Например:
<button on-click='User.popup = true'>register</button>
<div css-show='User.popup'>register popup</div>
это идеальное решение невозбранно стырено мной с ангуляра, а стиль написания приложений в целом, и наследование, стырен с реакта))
п.с. кстати,
on-click='User.popup = true' вообще то по уму это уже не датабиндинг, это логика, и она должна быть в яваскрипте описана, по хорошему надо создать метод
User.showPopup() и в нем логику описать, а в on-click просто забиндится к нему
on-click='User.showPopup()'
Тут я просто для наглядности показал как css-show реагирует на булево значение)