アタッチデタッチ

漫才コンビの名前のようだがもちろんそうではない。AttachDetachException というGWTの例外である。

親パネルに子パネルを2つばかり用意するのだが、実際にaddするのはその内1つだけ、それを何らかの操作でトグルで切り替えるという事をやろうとして上手く行ってたのだが。

その子パネルの中で、DOM要素をクリアしたり新しく突っ込んだりを動的にやるようにした途端、上記の子パネル切り替え(要は画面遷移なのだが)で、どーもーアタッチでーすデタッチでーすぼくたちUmbrellaExceptionの下に入って頑張ろうと思ってるんですけどといった体で落ちる(漫才だけに)。

addした後にその追加した要素の中身がいじられてるとremove出来ないみたいなのだ。困った。

例外を握りつぶしたらなんの問題もなく動く。remove自体は出来てるようだ。掘り下げると最後にはIllegalStateExceptionになっていて、「onDetachはDOMに存在する時に呼んでくれ」というメッセージが入っていた。

つまり、子パネルのremoveまでは上手くいくのだが、その後にonDetachとかいう名前からするとイベントハンドラ的なものが子パネルの階層を下に辿ってなんかしようとして、add時点とその階層が異なってると落ちる(漫才だけに)とまあこういう事らしい。

遠慮無く握りつぶさせてもらおう。時間がないのだ時間が!