Я исправляю некоторые из Draggable кода jQuery *.
Цель состоит в том, чтобы избежать изменения исходных файлов и динамически исправлять одну из внутренних функций.
Функция _generatePosition
объявлена так:
(function($) {
$.widget("ui.draggable", $.ui.mouse, {
...
_generatePosition: function(event) {
...
}
}
})(jQuery);
Можно ли добиться его динамической замены?
* Таким образом, он вычисляет привязывающую сетку относительно вершины родительского элемента, а не относительно вершины перетаскиваемого элемента. См. здесь для получения дополнительной информации.
2 ответа
Вы можете управлять отдельными экземплярами:
.draggable().data("draggable")._generatePosition = function() {};
Или измените прототип, влияя на все экземпляры:
$.ui.draggable.prototype._generatePosition = function() {};
Отредактируйте следующие комментарии: Кажется, вы можете редактировать их (после перезаписи последнего виджета), но я все равно держусь подальше. Вот пример базового метода, вы можете изменить его там, если хотите, но имейте в виду это может и, вероятно, сломает в будущем выпуске. Также любые «наследники» виджета не будут воспринимать эти изменения, не будучи уверенными, что это проблема.
Что касается причины, отказать вам в доступе не является причиной на самом деле (не в этом случае). В таких случаях с библиотекой лучше быть чистым, чем лишать вас доступа, или , потому что библиотека может захотеть изменить архитектуру позже, и все же сломать как можно меньше людей, когда они это делают ... позволяя вам только доступ к «открытым» членам их кода дает авторам больше гибкости в изменении всего, что является «частным».
Пример: пользовательский интерфейс jQuery 1.8 перенес много кода в утилиту позиционирования, что позволяет частная очистка кода, которую вы не видели, происходила, так как до этого она была приватной, что позволило довольно сильно оптимизировать / сократить код, не нарушая людей влево и вправо.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.