如何防止smartgwt污染窗口命名空间?

时间:2010-07-19 19:46:38

标签: javascript namespaces smartgwt

我在一个创建'Calendar'对象的项目中存在javascript。该对象是window的成员。

当我将smartgwt添加到我的项目时,原始的Calendar对象被smartgwt中打包的智能客户端日历(ISC_Calendar)覆盖。

使用基于浏览器的JS调试器,我发现smartgwt中的所有JS对象都包含在windowwindow.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文件,但这并不能解决更大的问题。我不想担心在未来遇到命名空间问题

2 个答案:

答案 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中注册类。