2010-01-08 92 views
0

我一張有道場代碼,包括通過與下面的代碼dojo.addOnLoad功能的網頁:爲什麼我的dojo.byId不能在腳本庫中工作?

laborDetailHandler.RevenueTotalInput = dojo.byId('#{id:LaborRevenueTotal}'); 
if (!laborDetailHandler.RevenueTotalInput) { 
console.warn('RevenueTotalInput not found.') 
} 

如果這個代碼是在網上,即使它是LaborRevenueTotal輸入框上面,它作品。

如果將此代碼移出到腳本庫,則會收到'RevenueTotalInput not found。'。消息,它告訴我dojo.addOnLoad接收函數並執行它,但由於某種原因函數不起作用。

我完全難住了。有人有主意嗎?

+0

更新:我應該提到...輸入字段html是: 2010-01-08 22:41:27

+0

「你搬到了腳本庫」究竟是什麼意思?是否有代替#{...}表達式的服務器端代碼? – peller 2010-01-11 05:01:04

回答

0

我很抱歉!我以爲這是一個道場問題;相反,它是一個Lotus Notes XPages問題!我仍不確定爲什麼會發生這種情況,但有人有corroborated the that problem is larger than my script以及如何解決它。

我的解決方法是,不是在腳本庫中找到這些元素,而是獲取我需要的元素的句柄,並將它們傳遞給腳本庫中的初始化函數。

非常感謝你響應。我很抱歉我的問題不好。

1

'#{...}'表達式在SSJS庫內不起作用,只能在XPage或Custom Control的源代碼中使用。

解決方法:在任何其他地方使用#{}子句(例如文本字段),並在您的客戶端腳本中引用它。

0

儘管腳本庫不在XPages中編譯;他們也不會內聯運行。

XPages中的最佳實踐是在腳本庫中使用黑盒子方法。對腳本庫中定義的所有函數使用參數化(對服務器端和客戶端均有效)。

在SSJS中,或者,您可以通過getComponent獲取組件對象並學習它們的客戶端ID,但這會降低腳本庫的可重用性。如果你使用它們只是爲了保持你的XSP代碼清潔,那很好;但請確保使用錯誤陷阱(try/catch),因爲這是調試SSJS的頭痛問題。

0

如果您將代碼放入XPage的屬性或事件中,它將作爲字符串並通過評估程序傳遞。如果您在Package Explorer視圖中查看爲您的XPages創建的Java類,您會明白我的意思。該代碼是一個字符串,然後傳遞給一個Java函數,在頁面加載或運行時對其進行評估。

我不認爲腳本庫中的代碼會通過評估程序,因此不會計算#{id:myField}。還有一個問題的上下文,以確定哪個 myField在您的呈現HTML頁面上的意思。

圍繞它有兩種方法。一種是通過XPage事件將ID傳遞給您的SSJS/CSJS功能。 CSJS中的另一個選項是使用dojo.query。

相關問題