Oracle apex 从页面内嵌入的JavaScript调用apex.widget.datepicker

Oracle apex 从页面内嵌入的JavaScript调用apex.widget.datepicker,oracle-apex,Oracle Apex,我试图调用apex.widget.datepicker,将带有时间的自定义日期选择器应用于“页面加载时执行”内的字段。在Apex的早期版本中,这很好,但我们最近迁移到了Apex 4.1.1.00.23 我在加载页面时遇到的JS错误是“TypeError:无法将未定义的转换为对象” 另一方面,我可以将字段的类型更改为date,但如何自定义绑定到该特定字段的jquery date对象?当我访问4.1.1工作区时(因为apex.oracle.com更新为4.2),我立即尝试重现这些问题。然而,我不能!

我试图调用apex.widget.datepicker,将带有时间的自定义日期选择器应用于“页面加载时执行”内的字段。在Apex的早期版本中,这很好,但我们最近迁移到了Apex 4.1.1.00.23

我在加载页面时遇到的JS错误是“TypeError:无法将未定义的转换为对象”


另一方面,我可以将字段的类型更改为date,但如何自定义绑定到该特定字段的jquery date对象?

当我访问4.1.1工作区时(因为apex.oracle.com更新为4.2),我立即尝试重现这些问题。然而,我不能! 我发誓我在apex.oracle.com上遇到了问题,但我不再那么确定我是否犯了错误

事实上,4.1.0和4.1.1的响应完全相同,正如我所期望的那样。4.2有所不同,但只是略有不同。我不知道为什么到现在为止我浪费了这么多时间,我一定是错过了一些明显的逻辑缺陷

我不知道4.0和4.1之间发生了什么变化,所以我不确定您在4.0中初始化了日期选择器。如果您所要做的只是调用一个项目的
apex.widget.datepicker
,那么在4.1中,由于涉及到一个额外的步骤,所以会有一些变化

调用
apex.widget.datepicker
之前,必须确保已加载区域设置。我通过查看apex在打开actions>filter菜单时发出的ajax调用发现了这一点。该代码在
apex\u images
目录中附加了一个脚本标记,该标记的源设置为datepicker区域设置文件。该文件初始化日期选择器中的一些变量。
例如,语言为english=
'en'
的应用程序将初始化为
apex.jQuery.datepicker.regional['en']

这很重要,因为如果不发生这种情况,就会出现
undefined
对象错误,因为小部件代码试图访问这些区域设置变量。如果脚本代码尚未追加,则不会追加,并且
apex.widget.datepicker
将抛出错误

为了确保datepicker代码正常工作,您需要包含区域设置javascript文件。您可以通过将其添加到页面标题、页面本身、模板中来实现这一点,也可以动态实现:由您决定最佳位置

以下是动态添加区域设置文件的示例:

$(document).append('<script type="text/javascript" src="/i/libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>');
现在,请注意该路径存在一些硬编码问题。有“/i/”、jquery版本和区域设置。对于jquery版本,可以做的事情不多。
/i/
可替换为
apex\u img\u dir
可以使用
BROWSER\u语言
应用程序变量捕获区域设置

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-&BROWSER_LANGUAGE..js"></script>');
$(文档)。附加(“”);
应该这样做(检查ajax调用以确保!)

一旦包含脚本,调用apex.widget.datepicker应该是安全的

现在,我还在4.2上做实验,结果基本相同。唯一改变的是您必须包含小部件代码

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.22/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>' +
'<script type="text/javascript" src="'+apex_img_dir+'libraries/apex/minified/widget.datepicker.min.js?v=4.2.0.00.19"></script>');
$(文档)。附加(“”+
'');

这应该涵盖大部分内容。

当我访问4.1.1工作区时(因为apex.oracle.com更新为4.2),我立即尝试重现这些问题。然而,我不能! 我发誓我在apex.oracle.com上遇到了问题,但我不再那么确定我是否犯了错误

事实上,4.1.0和4.1.1的响应完全相同,正如我所期望的那样。4.2有所不同,但只是略有不同。我不知道为什么到现在为止我浪费了这么多时间,我一定是错过了一些明显的逻辑缺陷

我不知道4.0和4.1之间发生了什么变化,所以我不确定您在4.0中初始化了日期选择器。如果您所要做的只是调用一个项目的
apex.widget.datepicker
,那么在4.1中,由于涉及到一个额外的步骤,所以会有一些变化

调用
apex.widget.datepicker
之前,必须确保已加载区域设置。我通过查看apex在打开actions>filter菜单时发出的ajax调用发现了这一点。该代码在
apex\u images
目录中附加了一个脚本标记,该标记的源设置为datepicker区域设置文件。该文件初始化日期选择器中的一些变量。
例如,语言为english=
'en'
的应用程序将初始化为
apex.jQuery.datepicker.regional['en']

这很重要,因为如果不发生这种情况,就会出现
undefined
对象错误,因为小部件代码试图访问这些区域设置变量。如果脚本代码尚未追加,则不会追加,并且
apex.widget.datepicker
将抛出错误

为了确保datepicker代码正常工作,您需要包含区域设置javascript文件。您可以通过将其添加到页面标题、页面本身、模板中来实现这一点,也可以动态实现:由您决定最佳位置

以下是动态添加区域设置文件的示例:

$(document).append('<script type="text/javascript" src="/i/libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>');
现在,请注意该路径存在一些硬编码问题。有“/i/”、jquery版本和区域设置。对于jquery版本,可以做的事情不多。
/i/
可替换为
apex\u img\u dir
可以使用
BROWSER\u语言
应用程序变量捕获区域设置

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-&BROWSER_LANGUAGE..js"></script>');
$(文档)。附加(“”);
应该这样做(检查ajax调用以确保!)

一旦包含脚本,调用apex.widget.datepicker应该是安全的

现在,我还在4.2上做实验,结果基本相同。唯一改变的是您必须包含小部件代码

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.22/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>' +
'<script type="text/javascript" src="'+apex_img_dir+'libraries/apex/minified/widget.datepicker.min.js?v=4.2.0.00.19"></script>');
$(文档)。附加(“”+
'');

这应该涵盖了大部分内容。

我一直在为这次aswe而头疼