我在一个创建'Calendar'对象的项目中存在javascript。该对象是window
的成员。
当我将smartgwt添加到我的项目时,原始的Calendar对象被smartgwt中打包的智能客户端日历(ISC_Calendar)覆盖。
使用基于浏览器的JS调试器,我发现smartgwt中的所有JS对象都包含在window
和window.isc
中。我绝对不希望它们都在窗口级别,因为它们中的许多都有像Calendar这样的通用名称。
我的案例中的违规文件是ISC_Calendar.js,它在gwt编译后以war /< projectname> / sc / modules结尾。它调用以下行:isc.ClassFactory.defineClass("Calendar","Canvas","DataBoundComponent");
GWT编译位置:war / projectname / sc / modules / ISC_Calendar.js
Jar位置:com.smartclient public / sc / modules / ISC_Calendar.js
Src位置:找不到它
我想我可以改变我正在使用的jar中的javascript文件,但这并不能解决更大的问题。我不想担心在未来遇到命名空间问题
答案 0 :(得分:0)
假设您要将smartgwt的日历重命名为Calendar2。
首先,查看smartgwt的源代码。见这里:http://code.google.com/p/smartgwt/wiki/BuildingFromSVN
然后,在源代码中,打开trunk / main / src / com / smartgwt / client / widgets / calendar / Calendar.java。找到这段代码:
public Calendar(){
scClassName = "Calendar";
}
将Calendar2替换为“Calendar”。
现在编译源代码。请再次查阅此链接以帮助您编译:http://code.google.com/p/smartgwt/wiki/BuildingFromSVN。
获取生成的smartgwt.jar并在jar编辑器中打开它。导航到com.smartclient public/sc/modules/ISC_Calendar.js
并将其打开。找到这段代码:
isc.ClassFactory.defineClass("Calendar","Canvas","DataBoundComponent");
将Calendar2替换为“Calendar”。
接下来,在同一个文件中,进行查找和替换。将isc.Calendar
替换为isc.Calendar2
。也可以在ISC_Core.js中进行查找和替换。
现在保存jar。日历应该是有效的,window.Calendar命名空间将不受影响。
答案 1 :(得分:0)
您必须设置
var isc_useSimpleNames = false;
加载任何SmartClient组件之前的脚本标记中的。这样,SC将仅在isc。* namespace中注册类。