2013-10-03 5 views
5

Ich habe diesen HTML Code:auf Wechsel, wenn Wert Bindung

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

Und diesen Dart-Code:

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); 
    } 

} 

In diesem Fall wird das on-change Ereignis wird nur dann ausgelöst, von Zeit zu Zeit. (Ich habe noch nicht herausgefunden, wann genau).

Wenn ich die Bindung value={{text}} entferne, wird das Ereignis ordnungsgemäß jedes Mal ausgelöst, wenn das Textare geändert wird.

Bin ich etwas übersehen oder ist das ein Fehler?

Antwort

7

Mit Polymer 0.8+ Sie * yourFieldName ** geändert verwenden können. Wenn sich die beobachtete Eigenschaft ändert, wird die Methode Changed aufgerufen. Da String text eine Zwei-Wege-Datenbindung ist, wird durch Ändern des Werts der Textfläche der Wert String text geändert und die Methode textChanged aufgerufen. Dies funktioniert mit Ihrem ursprünglichen Code und benötigt keine 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

Anscheinend habe ich einen ObservableBox als verwenden beschrieben in this stackoverflow question

So landete ich mit:

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; 
    } 

}