2

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

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

我试过这样的事情:

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

以及各种其他变体,并开始认为我只是不了解 jQueryUI 的“可扩展性”,或者无法完成。

有谁知道我怎么能做到这一点?

谢谢

4

2 回答 2

3

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!');
    }
});
于 2010-03-26T20:53:43.913 回答
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,我不会看日期选择器。小部件工厂要高级得多,这里看看 ui.tabs 是如何同时挂接事件和方法的

于 2011-09-16T05:32:31.063 回答