Skip to content

Instantly share code, notes, and snippets.

@Mausglov
Created June 5, 2015 12:01
Show Gist options
  • Save Mausglov/b3ad57689332f10a2db9 to your computer and use it in GitHub Desktop.
Save Mausglov/b3ad57689332f10a2db9 to your computer and use it in GitHub Desktop.
Заметки по Матрёшке.
Объяснение, как же работает .bindNode:
возьмем пример из документации:
var Application = Class({
'extends': Matreshka,
constructor: function() {
// связываем свойство x и текстовое поле
this.bindNode( 'x', '.my-input' );
// связываем свойство x и блок с классом my-output
this.bindNode( 'x', '.my-output', {
setValue: function( v ) {
this.innerHTML = v;
}
});
// если свойство "х" изменилось, сообщаем об этом в консоли
this.on( 'change:x', function() {
console.log( 'x изменен на ' + this.x );
});
}
});
var app = new Application();
// конец примера
Рассмотрим связь this.bindNode( 'x', '.my-input' );
когда мы пишем
app.x = "some value";
будет вызван setValue() из биндера, при этом в контексте .my-input ( т.е. $(this) === $('.my-input') ). Чтобы содержимое инпута изменилось, это надо вписать руками:
$(this).val(v); // v - первый аргумент setValue
когда мы вводим что-то в инпут, то будет вызван getValue(). Опять же, в контексте .my-input. То, что вернёт getValue() и будет записано в app.x . То есть можно считать, что где-то внутри происходит
x = getValue();
Это всё надо учитывать ,чтобы не возникали странности. Нетрудно получить ситуацию, когда в инпуте одно, а в привязанном свойстве другое.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment