Двухсторонний биндинг. Как это делается?
Собственно такой вопрос, на который не нахожу ответа. Как сделать двусторонний биндинг. По типу как делает ангуляр.
Есть элемент DOM Код:
<input id="test" type="text" value="{{ data.value }}" /> var data = { value: '' }; function bindElem() { var el = document.getElementById('test'); // Здесь делаем связывание } bindElem(); Интересует, как это делает ангуляр или кнокаут? Цель вопроса - академический интерес. Хочется повысить свои знания в этом вопросе. А то что-то не нахожу доки, а ковыряться в исходниках - это уже на крайняк :( |
Без сведений об эшелоне прототопирования этого вашего ангуляра или что там - невозможно судить по обрывкам кода как оно может выглядеть в том самом эшелоне.
|
Цитата:
Как-то же делается бинд, когда меняем объект, на лету сразу меняется дом. Вот бы хотелось узнать, как они это делают. |
|
Цитата:
|
Цитата:
Есть дом элемент. Код:
<input type="text" id="test" test-attr="{{ data.val }}" /> Далее код JS // Глобальный объект, который будет связываться var data = {}; (function() { var el = document.getElementById('test'); data.val = 'new value'; // Функция, которая свяжет объект и элемент (или элементы, DOM) MaginBindFunction(el, data); })(); // Проверяем результат console.log(document.getElementById('test').dataset.attr); // Show 'new value' // Через три секунды изменим значение и оно должно так же в DOM элементе. setTimeout(function() { data.val = 'change value'; console.log(document.getElementById('test').dataset.attr); // Show 'change value' }, 3000); Бинд не только для атрибута data, но и для чего угодно. |
Это называется reference.
Там где оно определяется явно, можно написать так elem.dataset.attr = &val; Как это делается в js - надо посмотреть там, про что вы задавали вопрос. |
Вспомнил, в нормальном программировании это называется указатель, натурально, pointer.
И еще заметил что тут явно сеттер (ну и геттер наверно там же) http://ejohn.org/blog/javascript-getters-and-setters/ В php магические методы давно стали каноническими. |
Часовой пояс GMT +3, время: 20:21. |