在Django Admin页面上使用MooTools的自定义小部件

时间:2010-06-05 05:11:18

标签: jquery django-admin mootools

我有一个自定义小部件,我想将其提供给Django Admin页面。这可以使用formfield_overrides子类的ModelAdmin属性轻松实现,并使用Media子类,我可以为此小部件定义必要的JavaScript和CSS。这很有效。唯一的问题是我的自定义小部件需要MooTools正常运行,这似乎与jQuery冲突并打破了默认的Django Admin小部件(即日期和时间选择器)。

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

我喜欢这里,因为我希望能够使用内置的管理窗口小部件,但我的自定义窗口小部件同样重要,如果不是更重要的话。小部件在整个我的应用程序中使用,它使用MooTools,因此我无法更改框架,而且我宁愿不维护两个使用不同框架执行相同功能的小部件。有没有人对我如何获得有任何建议围绕这场冲突?

1 个答案:

答案 0 :(得分:0)

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

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

对于记录,jQuery不会修改任何原型(所有函数都在jQuery命名空间上调用),MooTools不会修改Object.prototype自版本1.2以来

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