Как создать подкласс для определенного метода виджета jqueryui? - PullRequest
2 голосов
/ 26 марта 2010

Поскольку я обновил jQueryUI до версии 1.8, я обнаружил пару проблем в наших реализациях, и я мог бы исправить это сам, не дожидаясь их исправления, если бы я мог выяснить, как создать подкласс для определенного метода виджета datepicker, поэтому я вызываю родительский код, а затем выполнить мой код.

Я читал на $ .widget, но просто не могу понять, как это должно работать.

Я пробовал что-то вроде этого:

$.widget("ui.datepicker", {
  _showDatepicker: function(input) {
   alert('Yo');
   $.datepicker.prototype._showDatepicker.apply(this,arguments);
   alert('Hey!');
  }
 });

И всевозможные другие варианты, которые заставляют меня думать, что я просто не понимаю «расширяемость» jQueryUI или это просто невозможно.

Кто-нибудь знает, как мне этого добиться?

Thx

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Средство выбора даты в 1.8 не использует фабрику виджетов. Другие виджеты работают, но средство выбора даты еще не было реорганизовано для использования фабрики виджетов, что произойдет в более поздней версии jQuery UI.

Вы можете сделать что-то вроде даты:

var old_showDatepicker = $.datepicker._showDatepicker;
$.datepicker._showDatepicker = function(input){
    console.log('hello');
    old_showDatepicker.apply(this,arguments);
    console.log('goodbye');
}

А это для слайдера:

$.widget("my.slider", $.ui.slider, {
    _value: function(input) {
        console.log('Yo');
        $.ui.slider.prototype.value.apply(this,arguments);
        console.log('Hey!');
    }
});
0 голосов
/ 16 сентября 2011

ui.tabs получил много любви, альтернативный, возможно, менее кодовый способ таков:

https://github.com/jquery/jquery-ui/blob/c1cda180a93a6c0a63cf21a68dacb54233e03d03/ui/jquery.ui.tabs.js#L688

(function( $, dp ){
    var _showDatepicker = dp._showDatepicker;

    dp._showDatepicker = function( input ){

        alert( 'Yo' );
        _showDatepicker.apply( this, arguments );
        alert( 'Hey!' );
    }
}( jQuery, jQuery.ui.datepicker );

TBH, я бы не стал смотреть на DatePicker. Фабрика виджетов гораздо более продвинутая, просто посмотрите, как ui.tabs одновременно подключает события и методы здесь

...