jsDeferredとYUIの組み合わせ
去年の年末くらいから使ってみたいなとおもっていたjsDeferredをつかったサンプルを作ってみた。
特集:JSDeferredで,面倒な非同期処理とサヨナラ|gihyo.jp … 技術評論社あたりを見ているとデータへのアクセス部分のDeferred化だけど、ダイアログのコールバック部分に組み込んでまっすぐにUI処理を書けると便利かなとおもっていたので、そういうのを考えた。
つくったのは、dialog.alert, dialog.confirm, dialog.prompt, dialog.progressの4つ。
window.alert, window.confirm, window.promptのような機能をそれぞれYUI2をつかってDeferred化したものと、Deferredを受け取って、それが終了するまでダイアログをだすもの。
jsDeferredを利用するのはnewしてcallbackでcall,failを呼ぶだけと思えば、使う上で難しいことはそんなになかった。だいたい、おもったとおりに動いてくれる。progressつくるときはちょっと悩んだ。
実際問題としてはYUI2のSimpleDialogにはいろんなイベントがあってcall, fail, cancelをそれぞれどのコールバックに割り当てるかが悩みどころ。
作ったものの感想
- alert,confirm,promptは予想通りの使い勝手。
- progressについてはLoadingを出すだけならDeferred化する必要は無かった。下のような記述で十分簡単。ただUI上で受け取ったDeferredをcancelするUIという意味では便利かも。
function onclick() { loading = new LoadingDialog(); loading.show(); http.get("http://www.example.com/path/to/content") .next(function(){ loading.hide(); }); }