繁体   English   中英

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

[英]Why won't my dojo.byId work within a script library?

我有一个上面带有dojo代码的网页,其中包括一个传递给dojo.addOnLoad的函数,其中包含以下代码:

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

如果此代码是行内代码,即使它在LaborRevenueTotal输入框上方,它也可以工作。

如果将此代码移到脚本库,则会得到“找不到RevenueTotalInput”。 消息,告诉我dojo.addOnLoad接收了该函数并执行了该函数,但是由于某种原因该函数无法正常工作。

我完全被困在这里。 有人有想法么?

“#{...}”表达式仅在XPage或“自定义控件”的源代码中不能在SSJS库中使用。

解决方法:在其他任何地方(例如文本字段)使用#{}子句,并在客户端脚本中引用它。

我道歉! 我认为这是一个道场问题; 相反,这是一个Lotus Notes XPages问题! 我仍然不确定为什么会发生这种情况,但是有人证实这个问题比我的脚本及其解决方法更大

我的解决方法是,不是在脚本库中找到这些元素,而是获取所需元素的句柄并将它们传递给脚本库中的初始化函数。

非常感谢您的服务。 对不起,我的问题不好。

尽管脚本库不是在XPages中编译的; 他们也不在线运行。

XPages中的最佳实践是在脚本库中使用黑盒方法。 对脚本库中定义的所有函数使用参数化(对服务器端和客户端均有效)。

在SSJS中,或者,您可以通过getComponent获取组件对象并了解其客户端ID,但是,这降低了脚本库的可重用性。 如果只使用它们来保持XSP代码干净就可以。 但是请确保使用错误陷阱(try / catch),因为调试SSJS非常麻烦。

如果将代码放在XPage的属性或事件中,它将作为字符串和评估程序传递。 如果在Package Explorer视图中查看为XPages创建的Java类,您将明白我的意思。 该代码是一个String,然后传递给Java函数,该Java函数在页面加载时或运行时对其进行评估。

我认为脚本库中的代码不会经过评估程序,因此不会计算#{id:myField}。 还存在上下文问题,从上下文可以识别在您表示的HTML页面上哪个 myField的含义。

有两种解决方法。 一种是将ID从XPage事件传递到SSJS / CSJS函数中。 CSJS中的另一个选项是使用dojo.query。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM