2010-01-08 81 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。

相关问题