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

Javascript 如何防止smartgwt污染窗口名称空间?,javascript,namespaces,smartgwt,Javascript,Namespaces,Smartgwt,我在一个创建“日历”对象的项目中使用了现有的javascript。该对象是窗口的成员 当我将smartgwt添加到项目中时,原始日历对象被smartgwt中打包的smartclient日历ISC_日历覆盖 使用基于浏览器的JS调试器,我发现smartgwt中的所有JS对象都包含在window和window.isc中。我绝对不希望它们都在窗口级别,因为它们中的许多都有通用名称,比如日历 在我的例子中,有问题的文件是ISC_Calendar.js,经过gwt编译后,它最终会出现在war//sc/mo

我在一个创建“日历”对象的项目中使用了现有的javascript。该对象是窗口的成员

当我将smartgwt添加到项目中时,原始日历对象被smartgwt中打包的smartclient日历ISC_日历覆盖

使用基于浏览器的JS调试器,我发现smartgwt中的所有JS对象都包含在window和window.isc中。我绝对不希望它们都在窗口级别,因为它们中的许多都有通用名称,比如日历

在我的例子中,有问题的文件是ISC_Calendar.js,经过gwt编译后,它最终会出现在war//sc/modules中。它调用以下行:isc.ClassFactory.defineClassCalendar、Canvas、DataBoundComponent

GWT编译位置:war/projectname/sc/modules/ISC_Calendar.js Jar位置:com.smartclient public/sc/modules/ISC_Calendar.js Src位置:找不到它


我想我可以在我使用的jar中更改javascript文件,但这并不能真正解决更大的问题。我不想担心将来会遇到名称空间问题,比如说您想将smartgwt的日历重命名为Calendar2

首先,查看smartgwt的源代码。请看这里:

然后,在源代码中,打开trunk/main/src/com/smartgwt/client/widgets/calendar/calendar.java。查找以下代码段:

public Calendar(){
    scClassName = "Calendar";
}
isc.ClassFactory.defineClass("Calendar","Canvas","DataBoundComponent");
并将日历替换为Calendar2

现在编译源代码。请再次查阅此链接以帮助您编译:

获取生成的smartgwt.jar并在jar编辑器中打开它。导航到com.smartclient public/sc/modules/ISC_Calendar.js并打开它。查找以下代码段:

public Calendar(){
    scClassName = "Calendar";
}
isc.ClassFactory.defineClass("Calendar","Canvas","DataBoundComponent");
并将日历替换为Calendar2

接下来,在同一个文件中,执行查找和替换。将isc.Calendar替换为isc.Calendar2。还可以在ISC_Core.js中查找和替换

现在保存这个罐子。日历应正常运行,且窗口。日历名称空间将保持不变。

您必须设置

var isc_useSimpleNames = false;

在加载任何SmartClient组件之前,在脚本中标记。这样SC将只在isc.*命名空间中注册类。

启用此选项后,当我尝试调用DynamicForm.getValues方法时,似乎出现了错误。。。可能应该将其报告为同构,因为错误来自SmartClient而不是SmartGWT。