【发布时间】:2012-02-26 13:58:14
【问题描述】:
我正在研究 Twitter 的 Bootstrap,现在想尝试在插件中添加一些功能,但我不知道该怎么做。以模态插件为例(http://twitter.github.com/bootstrap/javascript.html#modals),我想在插件中添加一个新函数,可以像标准插件方法一样调用它。我认为最接近的是以下代码,但是当我尝试访问时,我得到的只是该函数不是对象的一部分。
有什么建议吗?这是我尝试过的似乎最接近我需要做的事情:
$.extend($.fn.modal, {
showFooterMessage: function (message) {
alert("Hey");
}
});
那我想这样称呼它:
$(this).closest(".modal").modal("showFooterMessage");
编辑:好的,我想出了如何做到这一点:
(function ($) {
var extensionMethods = {
displayFooterMessage: function ($msg) {
var args = arguments[0]
var that = this;
// do stuff here
}
}
$.extend(true, $.fn.modal.Constructor.prototype, extensionMethods);
})(jQuery);
现有 Bootstrap 插件集的问题在于,如果有人想扩展它们,则没有一个新方法可以接受参数。我试图“解决”这个问题是在插件函数调用中添加参数的接受。
$.fn.modal = function (option) {
var args = arguments[1] || {};
return this.each(function () {
var $this = $(this)
, data = $this.data('modal')
, options = typeof option == 'object' && option
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option](args)
else data.show()
}) // end each
} // end $.fn.modal
【问题讨论】:
-
如果此编辑旨在作为答案,您现在应该可以将其作为答案发布。请继续这样做:)
-
回答我自己的问题似乎有点蹩脚;)
-
哦,别担心。这是完全正常的 - 即使I've done it once :)
标签: jquery jquery-plugins twitter-bootstrap