dojoにおいて、特定のプロパティが変更されたことを監視し、値の変更をトリガーとして何かイベントを実行させたい場合に使うらしい。
以下、簡単な使用例(Dojo道場 ~ 第10回「Dojo 最新動向 - Dojo 1.6」 (2/3):CodeZine(コードジン)から)
dojo.require("dojo.Stateful"); var obj = new dojo.Stateful(); // 監視の開始 var handle = obj.watch("foo", function(name, oldValue, newValue){ console.log("プロパティ " + name + " が " + newValue + " に変更されました "); }); // 単独のプロパティのセット // "プロパティfooがbarに変更されました"と表示 obj.set("foo", "bar"); // オブジェクトによるセット // 以下は obj.set("foo", "Howdy"); obj.set("bar", 3); と同等 obj.set({ foo: "Howdy", bar: 3 }); // setはカスケードが可能 // 以下はobj.set("foo", "Howdy"); obj.set("bar", 3); と同等 obj.set("foo", "Howdy").set("bar", 3); // 監視の終了 handle.unwatch(); // なにも表示されない obj.set("foo", "HOGE");
そして、大事なのはこのStatefulがすべてのウィジェットのベースクラス
(_WidgetBaseの親クラス)となっているため、
すべてのウィジェットでこのwatchメソッドによる値の監視を実装することができる。
つまり、テキストボックスに値が入力されたタイミングでポップアップを表示したり。
ただ、実際にはwatchさえすればどんなプロパティでもOKっぽいんだけど
Arraysが入るプロパティをwatchしようとした時、なぜかうまくいかない。
サンプルコード書きながら色々勉強しよう。