2012-01-03 4 views
0

Я хочу добавить функциональность диалогового окна автоматического уничтожения при закрытии без добавления специального кода для каждого диалогового вызова в текущем проекте. Поэтому я думаю, что это должно переопределить диалог по умолчанию close.jQuery Функция расширения пользовательского интерфейса расширяется

Я нашел способ сделать это (например: How to extend a jquery ui widget ? (1.7)), но я не хочу просто переопределять событие: мне также нужно сохранить предыдущее поведение события и добавить после него вызов $(this).dialog("destroy").

Любые предложения?

+0

Вы должны сохранить обработчик уничтожить первое, что запустить свой собственный, а затем сохранить один. Как вам удается переопределить этот обработчик? – kaz

ответ

3

Я не 100% уверен в правильности этого, но я думаю, что вы можете безопасно переопределить закрытым способом, как это:

$.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

Спасибо, отлично работает. И, да, лучше будет использовать события. В любом случае, также хотелось бы знать, как вызвать внутри переопределенный метод «уничтожить» или «открыть» себя? ТИА. – User

+1

Я думаю, вы можете просто вызвать 'this.destroy()' в этом контексте. Взгляните на http://jsfiddle.net/8KKMm/2/. – jjmontes

1

Вы можете добавить обработчик dialogclose к элементу страницы body.

Вы можете найти образец here.

Нет необходимости переопределять функцию закрытия класса диалога, вы можете просто использовать события, предоставляемые классом диалога.

Ex:

$("body").on("dialogclose", function(){ 
    alert("closed"); 
}); 
Смежные вопросы