« さらば Paged List | メイン | CBL Partial Updater (20050922) リリース »
2005年09月22日
prototype.js のイベント順序
prototype.js (1.3.1) を使用していて、奇妙な現象にぶつかったので、メモをかねてブログ。
prototype.js を非同期モード (asynchronous:true) で実行している場合、 onComplete の後に onLoading が呼ばれることがある。
原因は、prototype.js のこのコード:
if (this.options.asynchronous) {onLoading を自前でスケジュールしている点。
this.transport.onreadystatechange = this.onStateChange.bind(this);
setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
}
たぶん、なんらかの理由があってそうなっているんだろうけど (どうして?) 、イヤな仕様ですね。
とりあえず、 onComplete ハンドラで onLoading ハンドラをリセットすることで、問題に対処しました。
投稿者 kazuho : 2005年09月22日 11:47
トラックバック
このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/133
コメント
今、同じ現象で悩んでおります。
「onComplete ハンドラで onLoading ハンドラをリセット」
とは具体的にどのように対処すればよろしいのでしょうか?
javascriptにあまり慣れていないので対処できず困っています。
対処方法をご教授願えませんでしょうか?
投稿者 hideAki : 2006年01月19日 18:06
onComplete ハンドラの先頭で、
this.options.onLoading = Prototype.emptyFunction;
としています。
投稿者 kazuho : 2006年01月23日 12:08
回答ありがとうございます!
protorype.jsの勉強不足を痛感しました。
ソースを読む以外に為になるサイトをご存知ですか?
教えて頂けると大変うれしいのですが。。。
お手間でなければ宜しくお願いします!
投稿者 hideAki : 2006年01月23日 12:54
> protorype.jsの勉強不足を痛感しました。
> ソースを読む以外に為になるサイトをご存知ですか?
> 教えて頂けると大変うれしいのですが。。。
あまり読んでないのですが、 http://blog.hawklab.jp/item-21.html あたりでしょうか。
投稿者 kazuho : 2006年01月23日 13:47
ありがとうございます!勉強してみます!
投稿者 hideAki : 2006年01月23日 14:35