Ответ 1
Вы можете манипулировать отдельными экземплярами:
.draggable().data("draggable")._generatePosition = function() {};
Или измените прототип, затрагивая все экземпляры:
$.ui.draggable.prototype._generatePosition = function() {};
Я обезьяна исправляю часть кода jQuery Draggable *.
Цель состоит в том, чтобы избежать модификации исходных исходных файлов и динамически патчать одну из внутренних функций.
Функция _generatePosition
объявляется следующим образом:
(function($) {
$.widget("ui.draggable", $.ui.mouse, {
...
_generatePosition: function(event) {
...
}
}
})(jQuery);
Можно ли добиться его динамической замены?
* Таким образом, он вычисляет привязывающую сетку относительно вершины родительского элемента, а не по отношению к вершине элемента, который перетаскивается. Подробнее см. здесь.
Вы можете манипулировать отдельными экземплярами:
.draggable().data("draggable")._generatePosition = function() {};
Или измените прототип, затрагивая все экземпляры:
$.ui.draggable.prototype._generatePosition = function() {};
Редактируйте для комментариев ниже: Кажется, вы можете редактировать их (после перезаписи последнего виджета), но я все равно буду действовать ясно. Вот пример базового метода, вы можете изменить оттуда, если хотите, но имейте в виду, что это может и, возможно, сломается в будущем выпуск. Кроме того, любые "наследники" виджета не подберут эти изменения, не уверены, что это проблема.
По этой причине отказ в доступе - это не причина (не в этом случае). В библиотечных случаях, подобных этому, это более чисто, чем лишить вас доступа, или потому, что библиотека может захотеть впоследствии изменить архитектуру и все равно сломать как можно меньше людей, когда они это сделают... позволяя вам получать доступ только к "публичным" членам их кода дает авторам большую гибкость в изменении чего-либо, что "private".
Пример: jQuery UI 1.8 переместил много кода в служебную программу местоположения, позволяя много очищать код, который вы сделали "Слушай, потому что все было приватно, прежде чем это позволило сделать довольно большую оптимизацию/сокращение кода, не нарушая людей влево и вправо.
Вы можете их изменить, но только по базовому элементу, насколько я знаю. Но вы можете легко создать свою собственную фреймворк $.fn.draggable и просто вызвать исходную оболочку и запустить ее: draggableElement.data('draggable')._generatePosition = fn
$.ui.draggable.prototype._generatePosition = fn