Code
Rozważmy następujący Polymer niestandardowy element:Polymer 1.0: Dwukierunkowe powiązania z elementami wejściowymi
<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>
Używam tego niestandardowego elementu w moim index.html następująco:
<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>
Pytanie
Wierzę, że zadeklarowałem właściwość value
jako wiązanie dwukierunkowe (notify: true
); ale gdy klikam wejście i wpisuję tekst (powiedzmy: "foo"
), nie jest on odzwierciedlany w modelu (tzn. wywołanie document.querySelector('test-element').value
zwraca wartość ustawioną w index.html, "test"
). Interesujące jest, że atrybut wejścia zmienia się prawidłowo, ale właściwość value mojego elementu testowego nie zmienia się. czego mi brakuje?
Należy również zauważyć, że połączenie z document.querySelector('test-element').setAttribute('value', 'bar')
działa poprawnie.
Dzięki. Rozróżnienie wewnętrzne/zewnętrzne ma teraz dla mnie sens. Poprosiłem o edytowanie, dodając link do dokumentacji. –
Chciałbym tylko wskazać niuanse [Scott Miles] (http://stackoverflow.com/users/2192324/scott-miles), ponieważ pole 'readOnly' w deklaracji własności nie reguluje wyłącznie właściwości obiektu zachowanie w odniesieniu do elementów spoza lokalnego DOM, ale także elementy wewnątrz lokalnego DOM. IOW, jeśli ustawię właściwość jako tylko do odczytu, jest ona przeznaczona tylko do odczytu dla dzieci i przodków. –
Dla jasności, nie oznacza to, że właściwości tylko do odczytu nigdy nie są modyfikowalne; właściwość tylko do odczytu _jest modyfikowalna za pomocą specjalnej metody ustawiającej, ale z tego, co widzę, nie wynika to z użycia API wiążącego dane. –