0

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

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

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

如果将此代码移出到脚本库,我会收到“未找到RevenueTotalInput”。消息,它告诉我 dojo.addOnLoad 接收函数并执行它,但由于某种原因该函数不起作用。

我完全被难住了。有人有想法么?

4

4 回答 4

2

'#{...}' 表达式在 SSJS 库中不起作用,仅在 XPage 或自定义控件的源中起作用。

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

于 2011-03-05T10:23:23.033 回答
1

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

我认为脚本库中的代码不会通过评估器,因此不会计算 #{id:myField}。还有一个上下文问题,从该上下文中可以识别出呈现的 HTML 页面上的哪个myField 。

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

于 2012-02-01T11:15:48.890 回答
0

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

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

非常感谢佩勒的回复。很抱歉我的问题很糟糕。

于 2010-01-11T18:20:23.917 回答
0

虽然脚本库没有在 XPages 中编译;他们也不会内联运行。

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

或者,在 SSJS 中,您可以通过 getComponent 获取组件对象并了解它们的 client-id,但这会降低脚本库的可重用性。如果您只是为了保持 XSP 代码的清洁而使用它们,那很好;但请确保使用错误陷阱(try/catch),因为调试 SSJS 很让人头疼。

于 2012-01-28T11:38:54.937 回答