событие on-change не срабатывает должным образом при привязке значения

У меня есть этот HTML-код:

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

И этот код дротика:

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

}

В этом случае событие on-change запускается только время от времени. (пока не понял когда именно).

Когда я удаляю привязку value={{text}}, событие правильно запускается каждый раз при изменении текста.

Я что-то упускаю или это баг?


person enyo    schedule 03.10.2013    source источник


Ответы (2)


С Polymer 0.8+ вы можете использовать *yourFieldName**Changed. Когда наблюдаемое свойство изменится, будет вызван метод Changed. Поскольку String text имеет двустороннюю привязку данных, изменение значения текстовой области изменит значение String text и вызовет метод textChanged. Это работает с вашим исходным кодом и не требует 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}");
  }
}
person Nathanial    schedule 16.10.2013

По-видимому, мне нужно использовать ObservableBox, как описано в этом вопросе о стеке с переполнением

Итак, я закончил с:

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

}
person enyo    schedule 14.10.2013