Двухсторонний биндинг. Как это делается?
Собственно такой вопрос, на который не нахожу ответа. Как сделать двусторонний биндинг. По типу как делает ангуляр.
Есть элемент 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, время: 12:39. |