Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Переопределение метода базового класса (https://javascript.ru/forum/jquery/4336-pereopredelenie-metoda-bazovogo-klassa.html)

walash 13.07.2009 03:03

Переопределение метода базового класса
 
Доброго времени суток.

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

Конкретно: Есть jquery datepicker, у него есть метод _generateHTML, нужно сделать так, чтобы он вызывался и делал все что он делает, плюс еще дополнительные действия.

А вообще задача состоит в том чтобы динамически изменять Html datepicker'a, а проблема в том, что он постоянно его перегенерирует и я не знаю, куда привязать мои действия по изменению html.

(ах да, редактировать файл с кодом самого DatePicker'a нельзя)

полезные ссылки: http://jquery-ui.googlecode.com/svn/....datepicker.js

walash 13.07.2009 14:05

up

Dmitry A. Soshnikov 13.07.2009 14:29

walash, вы топик только сегодня создали, не нужно апать его так быстро/часто.

Сами уже что-то попробовали сделать? А то Ваш топик звучит как задание, а не просьба помочь. Для заданий, есть соответствующий раздел.

e1f 13.07.2009 14:34

Так сделать-то можно, но это гадко и подло :) То есть примерно так:
$.datepicker.constructor.prototype._generateHTML = function(){
  // do something ...
}
$.datepicker = new $.datepicker.constructor()

Но все же, может быть, можно без этого обойтись, решив проблему как-то иначе?

walash 13.07.2009 15:26

e1f, ты почти оветил на мой вопрос!! :dance:

еще последний шаг и проблема будет решена

$.datepicker.constructor.prototype._generateHTML = function(){

$.datepicker._generateHTML(inst); // не знаю как в этом месте вызвать этот метод, чтобы выполнился для текущего состояния объекта
DoSomeExtraActions();
}
$.datepicker = new $.datepicker.constructor();

P.S. to Dmitry A. Soshnikov: сори за напористость )

walash 13.07.2009 15:34

К тому же если так написать получается рекурсия :cray:

e1f 13.07.2009 16:30

Конечно, так получается рекурсия. Надо выдрать код старого метода, поместить в новый, и переделать (ну или дописать в конце свое, родное)

walash 13.07.2009 17:46

Спасибо большое за советы

x-yuri 14.07.2009 07:40

мб лучше так?
var oldGenerateHTML = $.datepicker.constructor.prototype._generateHTML;
$.datepicker.constructor.prototype._generateHTML = function(){
    oldGenerateHTML.apply(this, arguments); 
    ...
}

e1f 14.07.2009 12:48

Да, так действительно лучше :) Но тут маленькое но -- $.datepicker.constructor.prototype._generateHTML не существует


Часовой пояс GMT +3, время: 11:02.