我找到了一種方法來做到這一點,但不幸的是它涉及Bootstrap源代碼的更改。的代碼段完成實際方法調用是這樣的:
$.fn.modal = function (option) {
return this.each(function() {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option]()
else if (options.show) data.show()
})
}
爲了改變這種情況,第7行(在source code線206)應該被修飾以通過最初傳遞給封閉函數的任何其他參數。另外,必須將原始參數賦予jQuery的.each()
函數的每個迭代。這裏的工作代碼:
$.fn.modal = function (option) {
return this.each(function() {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option].apply($this.data('modal'), Array.prototype.slice.call(arguments, 1)); // pass the parameters on
else if (options.show) data.show()
}, arguments) // execute each iteration with the original parameters
}
我仍然在嘗試,以確保這種變化不會產生任何不良的副作用,但到目前爲止,一切正常。任何更優雅的解決方案將受到歡迎。