2015-06-12 13 views

Odpowiedz

6

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> 
+1

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? –

+0

@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ć! –

+0

[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" .) –

Powiązane problemy