代码之家  ›  专栏  ›  技术社区  ›  Tyler

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

  •  1
  • Tyler  · 技术社区  · 14 年前

    我在一个创建“日历”对象的项目中有现有的javascript。对象是的成员 window .

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

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

    在我的例子中,有问题的文件是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 回复  |  直到 13 年前
        1
  •  0
  •   MeTTeO Bob Herrmann    13 年前

    你必须设置

    var isc_useSimpleNames = false;
    

    在加载任何智能客户端组件之前的脚本标记中。这样,sc将只在isc.*命名空间中注册类。

        2
  •  0
  •   Tyler    14 年前

    假设您想将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";
    }
    

    将“日历”替换为日历2。

    现在编译源代码。请再次参考此链接以帮助您编译: 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");
    

    将“日历”替换为日历2。

    接下来,在同一个文件中,执行查找和替换。替换 isc.Calendar 具有 isc.Calendar2 . 也可以在isc_core.js中进行查找和替换。

    现在保存罐子。日历应该是功能性的,并且是窗口。日历名称空间将保持不变。