我正在尝试扩展 Bootstrap 下拉菜单。我使用的方法与扩展 Bootstrap 模态时使用的方法相同,但在 Dropdown 上它似乎不起作用。我通读了 BS 代码,但没有发现这两者之间有任何明显的区别。
_tgl = $.fn.dropdown.Constructor::toggle
$.fn.dropdown.Constructor::toggle = ->
alert('foo')
_tgl.apply(this, arguments)
_show = $.fn.modal.Constructor::show
$.fn.modal.Constructor::show = ->
alert('bar')
_show.apply(this, arguments)
下面的代码工作正常,在打开模式时我收到警报,在切换下拉列表时没有任何反应。如果我将警报插入到 BS Dropdown 的基本切换中,警报会弹出我们,因此会调用基本方法,跳过我的覆盖......有什么想法吗?
这里的第二个问题是为什么 super 在这里不起作用?例如:
$.fn.dropdown.Constructor::toggle = ->
alert('foo')
super
据我了解,该文档指出, super 会调用父方法,但会导致编译错误“无法在实例方法之外调用 super”。这是否意味着即使我覆盖了类方法,我也不能在类上下文之外使用 super ?
PS:这是第一个例子的编译JS代码,不熟悉coffeescript的人:
_tgl = $.fn.dropdown.Constructor.prototype.toggle;
$.fn.dropdown.Constructor.prototype.toggle = function() {
alert('foo');
_tgl.apply(this, arguments);
};
_show = $.fn.modal.Constructor.prototype.show;
$.fn.modal.Constructor.prototype.show = function() {
alert('foo');
_show.apply(this, arguments);
};