我想在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/(只是评论覆盖的东西,看它是否有效)。
我的印象是,当您想要添加自定义功能时,克隆一个函数然后将其称为“超级”是一个可行的选项。
有什么建议吗?
答案 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 );
};
}
}