扩展bootstrap jQuery模式

时间:2012-10-01 21:28:41

标签: javascript jquery twitter-bootstrap modal-dialog extend

我想在Bootstrap / jQuery中扩展$.fn.modal,所以我的扩展版本在通过传递额外选项初始化模态之前“做事”。我尝试过这个,就像我做一些扩展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/(只是评论覆盖的东西,看它是否有效)。

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

有什么建议吗?

2 个答案:

答案 0 :(得分: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 );
};

答案 1 :(得分:0)

David提供的解决方案是正确的,但要做到这一点,你必须确保加载jQuery,如上所述here,所以最终解决方案:

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