2010-07-19 41 views
1

我在創建'Calendar'對象的項目中存在javascript。該對象是window的成員。如何保持smartgwt不會污染窗口名稱空間?

當我將smartgwt添加到我的項目中時,原始Calendar對象被smartgwt中打包的smartclient日曆(ISC_Calendar)覆蓋。

使用基於瀏覽器的JS調試器,我發現所有來自smartgwt的JS對象都包含在windowwindow.isc中。我絕對不希望他們都在窗口級別,因爲他們中的很多人都具有像日曆這樣的通用名稱。

在我的情況下,有問題的文件是ISC_Calendar.js,它在gwt編譯後以war/<projectname>/sc/modules結尾。它調用下面一行:isc.ClassFactory.defineClass("Calendar","Canvas","DataBoundComponent");

GWT編譯位置:戰爭/項目名稱/ SC /模塊/ ISC_Calendar.js
罐的位置:com.smartclient公共/ SC /模塊/ ISC_Calendar.js
Src的位置:可以」 t找到它

我想我可以只更改我使用的jar中的JavaScript文件,但這並不能真正解決更大的問題。我不想擔心遇到名稱空間問題

回答

0

加載任何的SmartClient組件之前,必須在腳本標籤設置

var isc_useSimpleNames = false; 

。這樣SC將只在isc。*命名空間中註冊類。

+0

好吧,似乎啓用此選項後,我收到錯誤,當我試圖調用DynamicForm.getValues()方法...可能它應該被報告爲同構的錯誤來自SmartClient而不是SmartGWT。 – MeTTeO 2011-10-12 11:20:25

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中查找和替換。

現在保存罐子。該日曆應該是功能性的,並且window.Calendar命名空間將保持不變。

相關問題