В чем разница между One-Way Binding и Two-Way Binding?
Друзья,
Немного странный вопрос задам.
Есть одностороння привязка, когда интерфейс отображает данные из модели, и данные в модели меняются только сверху, т.е. в результате обработки события меняется модель, и в результате рисуется интерфейс с уже новыми данными.
Есть двухсторонняя, когда интерфейс может изменить модель, и в интерфейсе отобразятся новые данные из модели.
Считается что разница в направлении изменения данных, т.е. в одностороннем интерфейс не может менять модель, а в двухстороннем может.
Теперь вопрос на миллион. В любом случае двухсторонний биндинг под капотом имеет привязку к событиям (иначе как изменить модель), т.е. по своей логике это тоже самое, т.е. есть модель, затем подвязываемся на событие, в результате обработки события меняется модель, и затем рисуем интерфейс с новыми данными. Тоже самое, что и односторонняя привязка, только обычно это делается под капотом (вроде Ангуляра), и для разработчиков это видно как "двухсторонняя" привязка.
Немного непонятно что вы имеете ввиду.
Я вижу двусторонюю привязку как:
Автомобиль чтобы ускориться жмёт педаль газа, автомобиль ускоряется сьезжая с подьёма - педаль газа сама опускается.
Т.е. Положение педали газа и скорость зависимы в двустороннем порядке
Пример хороший, но технически не получается его наложить. Технически педаль сама не может отпуститься, потому что браузер не умеет писать данные форм в модели без нашего участия. В этом и вопрос, как-раз. Если это тоже делаем мы, точно так же, как и в односторонней привязке, тогда что такое двухсторонняя привязка?
Есть одностороння ... т.е. в результате обработки события меняется модель
Есть двухсторонняя, когда интерфейс может изменить модель, и в интерфейсе отобразятся новые данные из модели.
И то, и то - происходит через событие.
Вопрос лишь в том, на что именно влияет это событие:
1. Если только на данные (через методы, например) - это односторонний
2. Если сначала на модель (правит логику работы с данными и затем, сразу на данные - п.1) - двухсторонний.
Внутри функции обратного вызова в любом случае прописана логика работы с данными. Если меняется структура интерфейса в результате изменения данных, или структура самих данных (я так понял что это значит), то в одностороннем биндинге делается тоже самое (получаем данные, обрабатываем, выводим новые в нужном обработанном виде).
Понимать надо буквально, и не надо ничего выдумывать и фантазировать, фантазировать надо над чем-то другим. При односторонней связи одна сторона реагирует на изменения, вторая нет. При двусторонней они обе реагируют на изменения друг друга.
Пример с формами. Вот есть данные, которые отображаются в поле ввода. При изменении данных где-то в коде, изменения отображаются в поле ввода. Но при изменении кем угодно поля ввода, данные в коде не меняются. Это и есть односторонняя связь. При двусторонней данные будут менять при вводе в поле ввода.
>При двусторонней данные будут менять при вводе в поле ввода.
Это будет тоже изменением данных через код, т.е. и при изменении из кода меняется интерфейс, и при изменении из формы вызывается этот же код и меняется интерфейс, и этот алгоритм один и для односторонней связи, и для двухсторонней, потому что и там и там это работает через функцию обратного вызова (иначе технически нельзя).
Пример про отсутствие биндинга верный, но это не живой пример потому что все формы обрабатываются (в 99% процентов случаев кодом).
Роман Якимчук, неверные суждения, алгоритм разный, чтоб понять лучше попробуй реализовать. То как ты думаешь работать не может, так как получится бесконечный цикл перезаписи туда-сюда. Один код обрабатывает ввод с формы, другой код обрабатывает изменение данных, третий обновляет форму, четвертый обновляет данные.