Wystarczy przypisać obliczone powiązanie bezpośrednio do elementu szablonu za pomocą skryptu, upewniając się, że związane z nim właściwości są inicjowane po definicji obliczonego powiązania.
przykład:
<template is="dom-bind">
<div>
<input value="{{text::input}}">
</div>
<div>[[describe(text)]]</div>
</template>
<script>
(function() {
var template = document.querySelector('template[is="dom-bind"]');
template.describe = function(text) {
if (text) {
return 'You entered "' + text + '", which is ' + text.length + ' characters long.';
} else {
return 'You didn\'t even enter a thing! Shame on you.';
}
};
template.text = '';
})();
</script>
działa, oprócz tego, że wiązanie występuje _after_ występuje wytapiania. W rezultacie, jeśli zainicjuję 'template.text = 'początkowy tekst';' zaraz po 'var template = document.querySelector ('...');', obliczone powiązanie nie jest renderowane od razu: otrzymuję ostrzeżenie w wyjściu konsoli: [dom-bind :: _ annotatedComputationEffect]: metoda obliczeniowa "opisz" nie została zdefiniowana ". Jednak wiązanie ma miejsce, gdy zacznę pisać w polu wprowadzania. Jakieś przemyślenia na ten temat? –
@es_code, poszedłem dalej i skopiowałem powyższy kod lokalnie i uruchomiłem go, aby spróbować złapać problem; niestety (lub na szczęście?) nie dostałem żadnych ostrzeżeń/błędów w konsoli zarówno w przeglądarce Chrome, jak i Firefox. [Oto dokładny kod, który przetestowałem.] (Http://pastebin.com/AkWFcsZa) Czy możesz podać więcej szczegółów na temat środowiska, w którym pojawia się ostrzeżenie? Polecam również aktualizację do najnowszych mniejszych wersji Polymer i Polyfill WebComponents.js tylko po to, aby wyeliminować wszelkie problemy z wersjami. Jestem ciekawy, aby spróbować to powtórzyć! –
[spójrz na] (http://pastebin.com/6PzCpvKy). Dodałem opóźnienie 'setTimeout' do kodu javascript, aby symulować środowisko, z którym mam do czynienia. Chodzi o to, że może upłynąć trochę czasu od momentu zadeklarowania elementu 'is =" dom-bind "' aż do wykonania kodu, który definiuje 'opisz'. W zwykłym elemencie polimerowym nie stanowi to problemu, ponieważ wszystkie niezbędne wiązania zachodzą w odpowiednim czasie. (Dodałem również "template.text =" tekst początkowy ";" aby wyjaśnić, że obliczone wiązanie nie jest początkowo obliczane. Szukaj metody "[dom-bind :: _ ..." opisuj "nie zdefiniowane" .) –