2011-08-30 3 views
4

Я использую диалоговые окна пользовательского интерфейса jQuery, и я хочу добавить собственный метод.Добавить настраиваемый метод для плагина диалога пользовательского интерфейса

В основном, когда мой диалог имеет класс «рабочий», в нем есть нагрузка загрузки. Я пытаюсь написать какое-то глобальное приложение jQuery, чтобы при закрытии любого диалога он удалял класс «рабочий».

Я не совсем уверен, что я делаю, но это то, что я до сих пор:

(function ($) { 

    // BIND TO DIALOG CLOSE EVENT 
    $('.ui-dialog').live('dialogclose', function() { 
     $(this).dialog('cancelWorking'); 
    }); 

    // CUSTOM METHOD 
    $.fn.dialog.cancelWorking = function() { 
     $(this).removeClass('working'); 
    }; 

}(jQuery)); 

Как вы можете видеть, что я действительно не знаю, как назвать cancelWorking метод диалога , и я не уверен, правильно ли я определил этот метод.

+0

вы могли бы попробовать чтобы сделать свой собственный плагин, который наследуется от диалога и загружать его своими собственными методами. '$ .widget ('ui.myDialog', 'ui.dialog', {...});' – jyore

+1

Извините, строка '' ui.dialog'' должна быть фактическим виджета '$ .ui.dialog'. См., Например, сообщение ниже. – jyore

ответ

6

Как уже упоминалось в моем комментарии, вы можете наследовать от плагина и расширять его методы.

(function($,undefined) { 

    $.widget('ui.mydialog', $.ui.dialog,{ 
     test : function() { alert('works') }, 
    }); 

    $.extend($.ui.mydialog,{version:'v0.1'}); 
})(jQuery); 

Чтобы использовать это просто:

$('.selector').mydialog({modal:true}); //Create (same as a dialog) 

$('.selector').mydialog('test'); //Call extended method 

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

Следует также отметить, что это приятно, потому что вы все равно можете использовать обычный плагин без изменений в другом месте вашего пользовательского интерфейса.

+0

Так нет ли простого способа просто добавить настраиваемый метод к плагину без создания всего унаследованного пользовательского плагина? – BadHorsie

+0

Я сделаю небольшое исследование и попытаюсь выяснить ... так я лично это сделал. Я не думаю, что изменение общей формы плагина обязательно лучше всего. Для меня это практически то же самое, что редактирование исходного кода, который вы также можете делать. Я отредактирую свой пост, если найду что-нибудь еще. – jyore

+0

@BadHorsie, я не смог найти другой способ сделать это без полного разрушения пространства имен в диалоговом окне, что плохо ... есть ли причина, по которой вы были бы против унаследованного плагина с пользовательскими методами? Вы упомянули простой способ, но как расширение не просто ... вы можете взять мой образец кода и добавить свой метод, и вам хорошо идти ... Всего, вероятно, 20 строк кода или меньше, когда вы закончите. Кроме того, вы можете использовать свойство «this» внутри функции, которое дает вам доступ ко всем параметрам, методам, событиям и фактическому элементу напрямую. – jyore

4

Я хотел сделать то же самое, но не был удовлетворен принятым ответом. Я посмотрел немного дальше в нее и обнаружил, что вы можете новые методы, как, например:

$.ui.dialog.prototype.toggleProcessing = function(enable) { 
    alert(((enable) ? 'en' : 'dis') + 'able processing'); 
} 

И тогда вы можете назвать это, как вы назвали бы любой другой метод JQuery UI:

$('#myDialog').dialog('toggleProcessing', true); 
$('#myDialog').dialog('toggleProcessing', false); 
+0

Ответ на jyore - это предпочтительный способ сделать это, но мне нужно это путь. У меня было много устаревшего кода, который зависел от использования обычного автозаполнения. Предпочтительным способом было бы изменить все ссылки с «автозаполнения» на «myAutocomplete». Или мне нужно будет изменить исходный код, но это упростит обновление jQuery UI. Вот почему этот путь имеет смысл в некоторых случаях. – Peter

Смежные вопросы