代码之家  ›  专栏  ›  技术社区  ›  SBUJOLD

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

  •  2
  • SBUJOLD  · 技术社区  · 16 年前

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

    我在读$.widget,但我就是不知道该怎么做。

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

    有人知道我是怎么做到的吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  3
  •   PetersenDidIt    14 年前

    1.8中的datepicker没有使用widget工厂。其他小部件确实如此,但是datepicker还没有被重构以使用小部件工厂,这将在JQueryUI的更高版本中发生。

    您可以对日期选择器执行以下操作:

    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!');
        }
    });
    
        2
  •  0
  •   Drew    14 年前

    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