我正在修补一些jQuery的Draggable代码*。
目标是避免修改原始源文件并动态修补其中一个内部函数。
函数_generatePosition
的声明如下:
(function($) {
$.widget("ui.draggable", $.ui.mouse, {
...
_generatePosition: function(event) {
...
}
}
})(jQuery);
是否有可能实现动态替换?
*因此它计算相对于父元素顶部的捕捉网格,而不是相对于被拖动元素的顶部。有关详细信息,请参阅here。
答案 0 :(得分:11)
您可以操纵个别实例:
.draggable().data("draggable")._generatePosition = function() {};
或修改原型,影响所有实例:
$.ui.draggable.prototype._generatePosition = function() {};
答案 1 :(得分:3)
编辑以下评论:看来你可以编辑这些(在最后一个小部件重写之后),但我仍然会明确指出。 Here's an example of the base method,如果您愿意,可以从那里进行修改,但请记住,可以在将来的版本中破解。此外,窗口小部件的任何“继承者”都不会接收这些更改,也不确定这是否是一个问题。
至于原因,拒绝你访问并不是真正的原因(不是在这种情况下)。在像这样的图书馆案例中,它更干净而不是拒绝你访问或,因为图书馆可能希望稍后更改架构,并且当他们这样做时仍然尽可能少地打破...让你只有访问其代码的“公共”成员才能使作者更灵活地更改任何“私有”。
一个例子:jQuery UI 1.8将大量代码移动到position utility中,允许很多私有代码清理,你没有看到发生,因为它之前都是私有的,这允许一个相当大的优化/代码减少而不会让人左右分开。
答案 2 :(得分:3)
你可以实际修改这些,但据我所知,只能在每个元素的基础上修改。但是你可以轻松地创建自己的$ .fn.draggable包装器,只需调用原始包装器并运行它:draggableElement.data('draggable')._generatePosition = fn
$.ui.draggable.prototype._generatePosition = fn