[Dart] PolymerでObservableにsetterを使う

observableのプロパティに、setterを使いたいときってあるよね。

こんな感じ。

String _title = "";
@observable String get title => _title;
set title( String t ) => _title = "hoge $t";

で、html側で{{title}}ってやるわけですが。
でも、これ動きません!

titleの実体がfunctionだからだと思いますが、変更イベントが飛ばないのです。

というわけで、自分で変更イベントを飛ばせばOKとのこと。
具体的には、setterを下記のように変更します。

set title( String t ) {
  _title = notifyPropertyChange( #title, _title, t );
}

notifyPropertyChangeの仕様は下記の通り。

dynamic notifyPropertyChange(Symbol field, Object oldValue, Object newValue)

戻り値はnewValueとなっています。
そして、これをするとgetterの@observableが不要になります。つまり、observableに頼らず、自前で変更イベントを出せるってことですね。

…っていうか、#titleって何ヨ?
本来、const Symbol("title")としなければいけないっぽいが、表記を省略できるってことかね?

参考資料:

同様の質問
https://groups.google.com/a/dartlang.org/forum/#!topic/web-ui/hxCqmwjnLIA

まさにこれのサンプル
https://github.com/sethladd/dart-polymer-dart-examples/tree/master/web/setter_with_observable_property_change

コメント

このブログの人気の投稿

nginxでlocalhostとしてアクセスをサーバーに転送する方法

Android・・・テキスト描画あれこれ, ascent(), descent()等

Android:stateに応じてTextの色を変更する・・・ColorStateList