A Day in the Life

prototype.js の Ajax.Responders.register

最近のprototype.js(1.4_rc1かな?)から追加されたAjax.Responders.registerがかゆいところに手が届く感じで便利です。何をする物かと云うと、prototype.jsを使ってAjaxる場合、Ajax.Requestを通して通信を行います。そのAjax.Requestすべての通信開始時と終了時に任意のfunctionを登録できる機能です。早速
http://rails2u.com:8008/ (safariリンククリック注意!ブラウザがハングアップするという話)
でRESTWikiに組み込んでみました。これで裏で非同期に通信を行ってるとき、ブラウザの右上に視覚的に'loading...'の文字が表示されます。
実装方法は非常に簡単で

Ajax.Responders.register({
  onCreate: function() {
    if($('busy') && Ajax.activeRequestCount>0)
      Effect.Appear('busy',{duration:0.1,queue:'end'});
  },
  onComplete: function() {
    if($('busy') && Ajax.activeRequestCount==0)
      Effect.Fade('busy',{duration:0.5,queue:'end'});
  }
});

のようにonCreateとonComplete関数を登録するだけです。
また上記URLでsafariが落ちるのはこのAjax.Responders.registerで登録したからでなく、RESTWiki側の問題です。いまJavaScriptのフレームワークを実装して遊んでるんですが、内部で結構無理矢理な処理を行ってるのでWinIEとFirefoxでしか動かない可能性大です。あとそのせいでRESTWikiが挙動不審になりました!

記事の一覧 >