はてなハイクで筆のボタンを押したときに何かの処理を追加する

以下のように Hatena.Haiku.EntryForm.prototype.showDrawForm に
フックさせてやればいいと思っていんだけどなんかうまくいかない。

(function (orig) {
Hatena.Haiku.EntryForm.prototype.showDrawForm = function () {
  orig.apply(this, arguments);
  // 何かの処理
})(Hatena.Haiku.EntryForm.prototype.showDrawForm);


同じように showTextForm も showWebcamForm もダメ。
writeDrawForm とかは同じやり方でフックできるのになぁ。
なんで show はダメなんだろう。

(function (orig) {
Hatena.Haiku.EntryForm.prototype.writeDrawForm = function () {
  // 何かの処理
  return orig.apply(this, arguments); // writeDrawForm は返り値が必要
})(Hatena.Haiku.EntryForm.prototype.writeDrawForm);

write 系 と show 系のメソッドの違いは
show 系だけが Ten.Observer に登録されてること。
Firebug のコンソールから alert(Hatena.Haiku.EntryForm.prototype.showDrawForm.toString());
とかやるとちゃんと意図したものに書き変わっているので
Ten.Observer に登録したメソッドを後から書き換える方法ではダメなのかも。


仕方ないので代替案。
Ten.Observer で新しい関数を追加する。

var $E = Ten.DOM.getElementsByTagAndClassName;
var drawSelector = $E('img', 'input-selector-draw')[0];
new Ten.Observer(drawSelector, 'onclick', function () {
  // 何かの処理
});

比べてみて思ったけど、既存の showTextForm を書き換えるよりも
Ten.Observer で新しい関数を渡した方が分かりやすくていいかもしれない。