5

我有这个 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}}绑定时,每次更改 textare 时都会正确触发该事件。

我是否忽略了某些东西或者这是一个错误?

4

2 回答 2

7

使用 Polymer 0.8+,您可以使用 *yourFieldName**Changed。当观察到的属性发生变化时,该Changed方法将被调用。由于String text是双向数据绑定,改变textarea的值会改变值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}");
  }
}
于 2013-10-16T15:52:21.567 回答
0

显然我必须使用这个stackoverflow问题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;
  }

}
于 2013-10-14T14:10:06.013 回答