How to Extend Twitter Bootstrap Plugin

后端 未结 5 1910
面向向阳花
面向向阳花 2020-11-27 02:43

I am digging into Twitter\'s Bootstrap and now want to try and add some functionality to the plugins, but I can\'t figure out how to do so. Using the modal plugin as an exa

5条回答
  •  春和景丽
    2020-11-27 03:28

    This is an old thread, but I just made some custom extensions to modal using the following pattern:

    // save the original function object
    var _super = $.fn.modal;
    
    // add custom defaults
    $.extend( _super.defaults, {
        foo: 'bar',
        john: 'doe'
    });
    
    // create a new constructor
    var Modal = function(element, options) {
    
        // do custom constructor stuff here
    
         // call the original constructor
        _super.Constructor.apply( this, arguments );
    
    }
    
    // extend prototypes and add a super function
    Modal.prototype = $.extend({}, _super.Constructor.prototype, {
        constructor: Modal,
        _super: function() {
            var args = $.makeArray(arguments);
            _super.Constructor.prototype[args.shift()].apply(this, args);
        },
        show: function() {
    
            // do custom method stuff
    
            // call the original method
            this._super('show');
        }
    });
    
    // override the old initialization with the new constructor
    $.fn.modal = $.extend(function(option) {
    
        var args = $.makeArray(arguments),
            option = args.shift();
    
        return this.each(function() {
    
            var $this = $(this);
            var data = $this.data('modal'),
                options = $.extend({}, _super.defaults, $this.data(), typeof option == 'object' && option);
    
            if ( !data ) {
                $this.data('modal', (data = new Modal(this, options)));
            }
            if (typeof option == 'string') {
                data[option].apply( data, args );
            }
            else if ( options.show ) {
                data.show.apply( data, args );
            }
        });
    
    }, $.fn.modal);
    

    This way you can

    1) add your own default options

    2) create new methods with custom arguments and access to original (super) functions

    3) do stuff in the constructor before and/or after the original constructor is called

提交回复
热议问题