Я исправляю некоторые из Draggable кода jQuery *.

Цель состоит в том, чтобы избежать изменения исходных файлов и динамически исправлять одну из внутренних функций.

Функция _generatePosition объявлена так:

(function($) {

    $.widget("ui.draggable", $.ui.mouse, {
        ...
        _generatePosition: function(event) {
            ...
        }
    }
})(jQuery);

Можно ли добиться его динамической замены?


* Таким образом, он вычисляет привязывающую сетку относительно вершины родительского элемента, а не относительно вершины перетаскиваемого элемента. См. здесь для получения дополнительной информации.

13
Art 1 Авг 2010 в 17:38

2 ответа

Лучший ответ

Вы можете управлять отдельными экземплярами:

.draggable().data("draggable")._generatePosition = function() {};

Или измените прототип, влияя на все экземпляры:

$.ui.draggable.prototype._generatePosition = function() {};
11
Jörn Zaefferer 2 Авг 2010 в 13:45

Отредактируйте следующие комментарии: Кажется, вы можете редактировать их (после перезаписи последнего виджета), но я все равно держусь подальше. Вот пример базового метода, вы можете изменить его там, если хотите, но имейте в виду это может и, вероятно, сломает в будущем выпуске. Также любые «наследники» виджета не будут воспринимать эти изменения, не будучи уверенными, что это проблема.


Что касается причины, отказать вам в доступе не является причиной на самом деле (не в этом случае). В таких случаях с библиотекой лучше быть чистым, чем лишать вас доступа, или , потому что библиотека может захотеть изменить архитектуру позже, и все же сломать как можно меньше людей, когда они это делают ... позволяя вам только доступ к «открытым» членам их кода дает авторам больше гибкости в изменении всего, что является «частным».

Пример: пользовательский интерфейс jQuery 1.8 перенес много кода в утилиту позиционирования, что позволяет частная очистка кода, которую вы не видели, происходила, так как до этого она была приватной, что позволило довольно сильно оптимизировать / сократить код, не нарушая людей влево и вправо.

3
Nick Craver 2 Авг 2010 в 14:46