1

我想$.fn.modal在 Bootstrap/jQuery 中扩展,所以我的扩展版本在通过传递额外选项初始化模态之前“做事”。我尝试了这个,就像我做的一些时候来扩展 jQuery 原型一样:

var modal = $.fn.modal;

$.fn.modal = function() {
    this.each(function() {
        // do stuff
    });
    modal.apply(this, arguments);
}

$('#modal').modal(); // fails

上面的示例不起作用,尽管相同的模式适用于许多其他非引导 jQuery 原型。

这是一个演示它的小提琴:http: //jsfiddle.net/eTWSb/(只需评论覆盖的东西以查看它的工作)。

我的印象是,当您想要添加自定义功能时,克隆一个函数然后将其称为“超级”是一个可行的选择。

有什么建议么?

4

2 回答 2

8

好的,我想通了。覆盖时$.fn.modal,我还删除了引导程序放置的默认选项$.fn.modal.defaults(为什么?)。

所以当我扩展它时,我失去了show: true实际显示模态的默认选项......

这解决了它(但构造函数会丢失,除非你也复制它):

var modal = $.fn.modal,
    defaults = $.extend({}, $.fn.modal.defaults);

$.fn.modal = function(options) {
    options = $.extend( defaults, options );
    this.each(function() {
        // do stuff
    });
    return modal.call( this, options );
};
于 2012-10-01T22:12:47.970 回答
0

David提供的解决方案是正确的,但要做到这一点,您必须确保已加载 jQuery ,如此所述,因此最终解决方案:

window.onload = function() {
    if (window.jQuery) {  
        //modal extension
        var modal = $.fn.modal,
        defaults = $.extend({}, $.fn.modal.defaults);
        $.fn.modal = function(options) {
        options = $.extend( defaults, options );
        this.each(function() {
          // do stuff
        });
        return modal.call( this, options );
        };
    }
}
于 2015-10-23T16:48:59.720 回答