我正在创建一个Grails应用程序,该应用程序使用RichUI插件和Atmosphere插件。但是,它看起来与这些插件有某种不兼容性。当我在.gsp页面的头部声明资源标记时,只有一个插件正常工作。如果我这样声明:
<head>
<atmosphere:resources/>
<resource:rating />
...
仅适用于RichUI插件(星级)。换句话说,它只适用于大气插件:
<head>
<resource:rating />
<atmosphere:resources/>
...
知道为什么会这样吗?难道我做错了什么? 非常感谢。
更新
这是gsp页面中导入的资源:
<script type="text/javascript" src="/Ontourtest/plugins/atmosphere-0.4.1/js/jquery-1.4.2.js"></script>
<script type="text/javascript" src="/Ontourtest/plugins/atmosphere-0.4.1/js/jquery.atmosphere.js"></script>
<script type='text/javascript' src='/Ontourtest/plugins/richui-0.8/js/prototype/prototype.js'></script>
<script type='text/javascript' src='/Ontourtest/plugins/richui-0.8/js/rating/behavior.js'></script><script type='text/javascript' src='/Ontourtest/plugins/richui-0.8/js/rating/rating.js'></script><link rel='stylesheet' href='/Ontourtest/plugins/richui-0.8/css//rating.css'></link>
你能看到任何潜在的不兼容性吗?
答案 0 :(得分:1)
可能是方法名称冲突;两个插件都可以在默认命名空间中声明同名函数。我已经使用YUI Namespacing在我的应用中解决了这个问题。
它也可能是插件依赖项中的冲突,例如每个导入同一个库的不同版本。尝试查看生成的gsp页面的html,看看插件资源标签的导入内容。
修改强>
我快速浏览了这些Javascript库,碰撞可能是JQuery(由Atmosphere使用)和Prototype(由RichUI使用)使用的“$”令牌。
根据JQuery reference,调用“noConflict()”如下所示应解决问题。请记住,我没有尝试过这个,我不知道组件.js文件现在是否可以正常工作而无需进一步修改:
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
// Code that uses other library's $ can follow here.
</script>