如何子类化特定的jqueryui小部件方法?

时间:2010-03-26 20:40:05

标签: javascript jquery jquery-ui subclassing jquery-ui-datepicker

由于我将jQueryUI更新为1.8,我在实现中发现了一些问题,如果我能找到如何子类化datepicker小部件的特定方法,我就可以自己修复它而无需等待修复它们。父代码,然后执行我的代码。

我正在阅读$ .widget,但我无法理解这是如何工作的。

我试过这样的事情:

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

还有各种各样的变化和想法我认为我只是不理解jQueryUI的'可扩展性',或者它无法完成。

有人知道如何实现这个目标吗?

THX

2 个答案:

答案 0 :(得分:3)

1.8中的datepicker不使用小部件工厂。其他小部件可以,但是日期选择器还没有被重构以使用小部件工厂,这将在更高版本的jQuery UI中发生。

您可以执行类似于datepicker的操作:

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!');
    }
});

答案 1 :(得分:0)

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如何同时挂钩事件和方法here