2013-10-03 10 views
5

Mam ten kod HTML:na zmiany zdarzenia nie wypalania prawidłowo podczas wiązania wartości

<textarea id="text-to-convert" on-change="change" value="{{text}}"></textarea> 

i ten kod dart:

import "dart:html"; 
import 'package:polymer/polymer.dart'; 

@CustomTag('dictionary-converter') 
class DictionaryConverter extends PolymerElement with ObservableMixin { 

    @observable String text = "Initial text"; 

    void change(Event event, var detail, TextAreaElement textElement) { 
    print(textElement.value); 
    print(text); 
    } 

} 

w tym przypadku zdarzenie on-change jest wyzwalany tylko od czasu do czasu. (Jeszcze nie wiem, kiedy dokładnie).

Po usunięciu powiązania value={{text}} wydarzenie jest prawidłowo uruchamiane za każdym razem, gdy tekst ulega zmianie.

Czy coś przeoczyłem, czy to błąd?

Odpowiedz

7

polimerem 0.8 i nowsze można użyć * yourFieldName ** zmieniło. Gdy obserwowana właściwość ulegnie zmianie, zostanie wywołana metoda Changed. Ponieważ String text jest dwukierunkową linią danych, zmiana wartości textarea zmieni wartość String text i wywoła metodę textChanged. Działa to z oryginalnego kodu i nie wymaga ObservableBox

import "dart:html"; 
import 'package:polymer/polymer.dart'; 

@CustomTag('dictionary-converter') 
class DictionaryConverter extends PolymerElement with ObservableMixin { 

    @observable String text = "Initial text"; 

    textChanged(oldValue) { 
    print("textarea: ${this.shadowRoot.query("textarea").value}"); 
    print("text: ${text}"); 
    } 
} 
0

Widocznie muszę użyć ObservableBox jak opisano in this stackoverflow question

Więc skończyło się z:

import "package:polymer/polymer.dart"; 
import "package:observe/observe.dart"; 

@CustomTag('dictionary-converter') 
class DictionaryConverter extends PolymerElement with ObservableMixin { 

    ObservableBox csvText = new ObservableBox("Initial text"); 

    ready() { 
    csvText.changes.listen(convert); 
    } 

    void convert(x) { 
    String text = csvText.value; 
    } 

} 
Powiązane problemy