Пользовательские виджеты, использующие MooTools на страницах администратора Django - PullRequest
0 голосов
/ 05 июня 2010

У меня есть собственный виджет, который я хотел бы сделать доступным для страницы администратора Django. Это легко реализовать с помощью атрибута formfield_overrides подкласса ModelAdmin, а с помощью дочернего класса Media я могу определить необходимые JavaScript и CSS для этого виджета. Это работает довольно хорошо. Единственная проблема заключается в том, что мой пользовательский виджет требует, чтобы MooTools функционировал должным образом, что, кажется, конфликтует с jQuery и нарушает стандартные виджеты Django Admin (а ​​именно, средства выбора даты и времени).

Я думаю, что и MooTools, и jQuery модифицируют Object.prototype, и, поскольку MooTools загружается после jQuery, кажется, что он переопределяет модификации jQuery. DateTimeShortcuts.init(), отвечающий за отображение кнопок выбора даты и времени, не вызывается автоматически, если загружен MooTools.

Я в некотором роде здесь, потому что я хочу иметь возможность использовать встроенные административные виджеты, но мой пользовательский виджет так же важен, если не больше. Виджет используется во всем моем приложении, которое использует MooTools, поэтому я не могу менять каркасы, и я бы предпочел не поддерживать два виджета, которые выполняют одну и ту же функцию, используя разные каркасы. У кого-нибудь есть какие-либо предложения относительно того, как я могу получить вокруг этого конфликта?

1 Ответ

0 голосов
/ 06 августа 2010

MooTools 1.2.3+ имеет несколько мер безопасности для работы с jQuery (и другими библиотеками, которые не модифицируют прототипы).Прежде всего вы должны добавить MooTools после jQuery, а затем воздержаться от использования функции $ в вашем коде MooTools и вместо этого использовать document.id.
Таким образом, функция $ будет по-прежнемубыть «владельцем» jQuery (если вы не используете jQuery.noConflict)

Любые оставшиеся конфликты после того, как вы не используете функцию $, могут быть связаны с тем, что некоторые плагины jQuery используют for ... in для циклического перемещения по массиву безсоответствующая hasOwnProperty гарантия.

Для записи jQuery не изменяет ни один прототип (все функции вызываются в пространстве имен jQuery), а MooTools не изменяет Object.prototype, начиная с версии 1.2

. Edit: еще одна вещь: проверкатакже для любого загрязнения пространства имен, представленного плагинами jQuery, я много раз обнаруживал, что некоторые плагины внедряют функции в глобальное пространство имен и свойства в элементах DOM, которые конфликтуют с теми, которые используются в MooTools.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...