我有一个自定义小部件,我想将其提供给Django Admin页面。这可以使用formfield_overrides
子类的ModelAdmin
属性轻松实现,并使用Media
子类,我可以为此小部件定义必要的JavaScript和CSS。这很有效。唯一的问题是我的自定义小部件需要MooTools正常运行,这似乎与jQuery冲突并打破了默认的Django Admin小部件(即日期和时间选择器)。
我认为MooTools和jQuery都修改了Object.prototype
,并且由于MooTools在jQuery之后被加载,它似乎压倒了jQuery的修改。 DateTimeShortcuts.init()
,负责呈现日期和时间选择器按钮,如果加载了MooTools,则不会自动调用。
我喜欢这里,因为我希望能够使用内置的管理窗口小部件,但我的自定义窗口小部件同样重要,如果不是更重要的话。小部件在整个我的应用程序中使用,它使用MooTools,因此我无法更改框架,而且我宁愿不维护两个使用不同框架执行相同功能的小部件。有没有人对我如何获得有任何建议围绕这场冲突?
答案 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中使用的相反。