2012-01-03 12 views
0

現在のプロジェクトのすべてのダイアログ呼び出しに特別なコードを追加することなく、閉じるときに自動破棄ダイアログの機能を追加します。だから、私はそれがデフォルトのダイアログcloseイベントを無効にする必要があると思います。jQuery UIイベントの機能拡張

私はこれを行う方法を見つけました(たとえば、How to extend a jquery ui widget ? (1.7))。しかし、私はイベントを上書きしたくありません。イベントの以前の動作を保存してから、$(this).dialog("destroy")コールを追加する必要があります。

提案がありますか?

+0

あなたがあなた自身を実行することを、最初に破壊ハンドラを保存し、1を保存しなければなりません。 このハンドラをどのように無効にすることができますか? – kaz

答えて

3

私はこれの正しさ約100%わからないんだけど、私はあなたが安全に、このようなcloseメソッドをオーバーライドすることができると思います。

$.ui.dialog.prototype._originalClose = $.ui.dialog.prototype.close; 
$.ui.dialog.prototype.close = function() { 
     alert ('My stuff'); 
     $.ui.dialog.prototype._originalClose.apply(this, arguments); 
}; 

あなたはでこの作業を見ることができます:http://jsfiddle.net/8KKMm/

しかし、は、通常は外部ライブラリのオーバーライドを避けることをお勧めします。 jQuery UIライブラリを使ってマングリングすることなく、目標を達成するためのより良い方法があるかもしれません。 Dialogコンポーネントの利用可能なイベントを見てください:http://jqueryui.com/demos/dialog/

+0

ありがとう、うまく動作します。そして、はい、イベントを使う方が良いでしょう。とにかく、内包されたメソッドを内部で呼び出す方法を知りたいと思います。 TIA。 – User

+1

私は、単にそのコンテキスト内で 'this.destroy()'を呼び出すことができると思います。 http://jsfiddle.net/8KKMm/2/を見てください。 – jjmontes

1

ページのbody要素にdialogcloseハンドラを追加できます。

サンプルhereがあります。

ダイアログクラスのクローズ機能をオーバーライドする必要はありません。ダイアログクラスによって提供されるイベントを使用するだけで済みます。

例:

$("body").on("dialogclose", function(){ 
    alert("closed"); 
});