1

我正在尝试扩展 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);
  };
4

0 回答 0