【问题标题】:Custom widgets using MooTools on Django Admin pages在 Django 管理页面上使用 MooTools 自定义小部件
【发布时间】:2011-02-28 02:03:28
【问题描述】:

我有一个自定义小部件,我想将它提供给 Django 管理页面。这很容易使用ModelAdmin 子类的formfield_overrides 属性实现,并且使用Media 子类,我可以为这个小部件定义必要的JavaScript 和CSS。这工作得很好。唯一的问题是我的自定义小部件需要 MooTools 才能正常运行,这似乎与 jQuery 冲突并破坏了默认的 Django Admin 小部件(即日期和时间选择器)。

我认为 MooTools 和 jQuery 都修改了 Object.prototype,并且由于 MooTools 是在 jQuery 之后加载的,它似乎覆盖了 jQuery 的修改。 DateTimeShortcuts.init(),负责渲染日期和时间选择器按钮,如果加载 MooTools,则不会自动调用。

我在这里有点不知所措,因为我希望能够使用内置的管理小部件,但我的自定义小部件同样重要,甚至更重要。该小部件在我的整个应用程序中使用,它使用 MooTools,所以我不能更改框架,而且我宁愿不维护两个使用不同框架执行相同功能的小部件。有没有人对我如何获得任何建议围绕这个冲突?

【问题讨论】:

    标签: jquery django-admin mootools


    【解决方案1】:

    MooTools 1.2.3+ 为使用 jQuery(和其他不修改原型的库)提供了一些保护措施。首先,您应该在 jQuery 之后添加 MooTools,然后不要在 MooTools 代码中使用 $ 函数,而是使用 document.id
    这样,$ 函数仍将由 jQuery“拥有”(除非您使用 jQuery.noConflict)

    避免使用$ 函数后的任何剩余冲突可能是由于某些jQuery 插件使用for ... in 循环数组而没有相应的hasOwnProperty 保护措施。

    作为记录,jQuery 没有修改任何原型(所有函数都在 jQuery 命名空间上调用),并且 MooTools 从 1.2 版开始没有修改 Object.prototype

    编辑: 还有一件事:还要检查 jQuery 插件引入的任何命名空间污染,很多时候我发现一些插件在全局命名空间中注入函数和 DOM 元素中的属性与 MooTools 中使用的冲突。

    【讨论】:

    • 感谢您的回复;过了这么久,我怕没有人再上前了。我正在使用 MooTools 1.2.4。我的代码检查$ 函数是否具有noConflict 属性,如果是,则调用它并重新实现MooTools。我怀疑 Object.prototype 被修改的唯一原因是因为我找不到任何调用 DateTimeShortcuts.init() 方法的地方,所以我认为 jQuery 负责。我早就从我的代码库中删除了这个,但我会再次尝试使用你的其他建议。
    猜你喜欢
    • 2021-05-07
    • 2023-03-16
    • 2012-07-21
    • 2018-10-27
    • 2022-08-12
    • 2014-11-18
    • 2013-01-22
    • 2016-05-04
    • 2011-08-07
    相关资源
    最近更新 更多