为什么我的dojo.byId不能在脚本库中工作?

我有一个带有dojo代码的网页,包括一个传递给dojo.addOnLoad的函数,代码如下:
laborDetailHandler.RevenueTotalInput = dojo.byId('#{id:LaborRevenueTotal}');
if (!laborDetailHandler.RevenueTotalInput) {
 console.warn('RevenueTotalInput not found.')
}
如果此代码是内联的,即使它在LaborRevenueTotal输入框之上,也可以。 如果将此代码移出到脚本库,则会收到“未找到RevenueTotalInput”。消息,它告诉我dojo.addOnLoad接收函数并执行它,但由于某种原因,该函数不起作用。 我完全被这里难住了。有人有主意吗?     
已邀请:
'#{...}'表达式在SSJS库中不起作用,仅在XPage或Custom Control的源中。 解决方法:在其他任何位置使用#{}子句(例如,文本字段)并在客户端脚本中引用它。     
我道歉!我以为这是一个道场问题;相反,这是一个Lotus Notes XPages问题!我仍然不确定为什么会这样,但是有人证实了这个问题比我的脚本更大,以及如何解决它。 我的解决方法是,而不是在脚本库中找到这些元素,以获取我需要的元素的句柄,并将它们传递给脚本库中的初始化函数。 谢谢你的回应。对不起,我的问题很糟糕。     
虽然脚本库不是在XPage中编译的;他们也不会内联运行。 XPages中的最佳实践是在脚本库中使用黑盒方法。对脚本库中定义的所有函数使用参数化(对服务器端和客户端都有效)。 或者,在SSJS中,您可以通过getComponent获取组件对象并了解其客户端ID,但这会降低脚本库的可重用性。如果你只是为了保持你的XSP代码干净就可以了;但请确保使用错误陷阱(try / catch),因为调试SSJS很头疼。     
如果将代码放在XPage上的属性或事件中,它将作为String传递给评估者。如果您在Package Explorer视图中查看为XPage创建的Java类,您将看到我的意思。代码是一个String,然后传递给Java函数,该函数在页面加载或运行时对其进行求值。 我不认为脚本库中的代码通过评估器,因此不计算#{id:myField}。还有一个上下文问题,可以从中识别出渲染的HTML页面上的myField。 它有两种方式。一种是将ID从您的XPage事件传递到SSJS / CSJS函数中。 CSJS中的另一个选项是使用dojo.query。     

要回复问题请先登录注册