Ответ 1
Вот более прямой ответ на ваш вопрос.
Во втором примере вы ссылаетесь на функцию, которая должна находиться в глобальной области видимости (т.е. свойство объекта window
).
В первом примере вы ссылаетесь на свойство текущей модели представления.
Да, это тонкое различие, но это важно. Если вы используете атрибуты on-event, вы можете ссылаться только на вещи, которые существуют в глобальной области. Это означает, что вы должны поместить все, что хотите получить в глобальном масштабе, что приводит к очень грязному коду.
Если вы используете декларативные привязки, то точное значение привязок вместо этого зависит от контекста.
Это помогает думать о разметке HTML как нечто более совпадающее. То, что вы действительно смотрите, - это структурированный доступ к модели представления. Подумайте о with
и forEach
как вложенные контексты и другие привязки в качестве их атрибутов. Взаимосвязь между декларативными привязками и базовым HTML внезапно кажется более похожей на работу с XSLT.
Два примера очень похожи. Но лежащие в основе концепции значительно отличаются друг от друга, и поэтому привязка данных к таким мощным атрибутам и к событиям настолько неприятна.
Признаки атрибутов on-event не одобряются не только тем, что они смешивают логику со структурой. Это то, что они - слабая попытка закрепить произвольный код JavaScript на HTML-элементах, которые препятствуют правильной инкапсуляции логики приложения. Атрибуты on-event - это "крючки" низкого уровня, привязки расширяют поведение элементов.
Все, что было сказано, вероятно, могут сделать те же самые ужасные вещи, которые люди сделали с атрибутами on-event, используя декларативные привязки. Разница в том, что еще вы можете с ними сделать. Вы не должны всегда судить о технологиях, как их можно злоупотреблять - мы все взрослые здесь.