Код
Рассмотрим следующий Polymer пользовательский элемент:Polymer 1,0: Двусторонний переплеты с входными элементами
<dom-module id="test-element">
<template>
<input type="text" value="{{value}}">
<button>Reset</button>
</template>
<script>
Polymer({
is: 'test-element',
properties: {
'value': {
type: String,
reflectToAttribute: true,
notify: true,
value: null
}
}
});
</script>
</dom-module>
Я использую этот пользовательский элемент в моей index.html следующим образом:
<html>
<head>
<script type="text/javascript" src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="test-element.html">
<title>Test App</title>
</head>
<body>
<test-element value="test"></test-element>
</body>
</html>
Вопрос
Я считаю, что я назвал свойство value
двусторонним связыванием (notify: true
); но когда я нажимаю на ввод и набираю текст (скажем, "foo"
), он не отражается в модели (т. е. вызов document.querySelector('test-element').value
возвращает значение, установленное в index.html, "test"
). Интересно, что атрибут ввода value
изменяется правильно, но свойство value моего тестового элемента - нет. Что мне не хватает?
Следует также отметить, что звонок document.querySelector('test-element').setAttribute('value', 'bar')
работает правильно.
Спасибо. Теперь внутреннее/внешнее различие имеет смысл для меня. Я попросил изменить, добавив ссылку на документацию. –
Я хотел бы указать на нюанс [Scott Miles] (http://stackoverflow.com/users/2192324/scott-miles) в том, что поле 'readOnly' в объявлении свойства не только определяет свойство поведение по отношению к элементам вне локальной DOM, а также элементы внутри локальной DOM. IOW, если я устанавливаю свойство как только для чтения, он доступен только для чтения как для детей, так и для предков. –
Чтобы быть понятным, это не означает, что свойства, доступные только для чтения, никогда не изменяются; свойство read-only _is modifiable_ с помощью специального метода setter, но насколько я вижу, это не использование API привязки данных. –