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