扩展Coffee脚本中的引导下拉/超级用法

时间:2013-03-18 17:21:27

标签: jquery twitter-bootstrap coffeescript

我正在尝试扩展Bootstrap Dropdown。我使用的方法与扩展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的基本切换中插入警报,警告会弹出我们,因此调用基本方法,跳过我的覆盖...有什么想法吗?

这里的第二个问题是为什么不在这里超级工作? E.g:

$.fn.dropdown.Constructor::toggle = ->
  alert('foo')
  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);
  };

0 个答案:

没有答案