我正在尝试调用apex.widget.datepicker将自定义日期选择器与时间应用于“页面加载时执行”中的字段。在以前版本的Apex中,这个工作正常但我们最近已迁移到Apex 4.1.1.00.23
页面加载时得到的JS错误是“TypeError:无法将undefined转换为object”
另一方面,我可以更改到目前为止的字段类型,但是如何自定义绑定到该特定字段的jquery日期对象?
答案 0 :(得分:1)
当我访问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中初始化一个datepicker做了什么。如果您所要做的只是在项目上调用apex.widget.datepicker
以使其工作,那么在4.1中会因为涉及额外步骤而稍微改变。
在调用apex.widget.datepicker
之前,您必须确保已加载语言环境。我在打开动作>时检查了由apex发出的ajax调用。过滤菜单。该代码将一个脚本标记附加到apex_images
目录中的datepicker语言环境文件的源集。该文件初始化了datepicker中的一些变量
例如,语言为english = 'en'
的应用程序将初始化为apex.jQuery.datepicker.regional['en']
这很重要,因为如果没有发生这种情况,则会出现undefined
对象错误,因为窗口小部件代码会尝试访问这些区域设置变量。如果没有附加脚本代码,它们将不会,并且apex.widget.datepicker
将引发错误。
要确保datepicker代码有效,您需要包含locale javascript文件。您可以通过将其添加到页面标题,页面本身,模板中来执行此操作,也可以动态执行此操作:由您决定最佳位置。
以下是动态添加区域设置文件的示例:
$(document).append('<script type="text/javascript" src="/i/libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>');
这将获取给定目录中的文件(与操作&gt;过滤器相同),它看起来像这样:
//****** AMERICAN ******
apex.jQuery(function($){
apex.jQuery.datepicker.regional['en'] = {
closeText: "Close",
prevText: "Prev",
nextText: "Next",
currentText: "Today",
monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December" ],
monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ],
dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ],
dayNamesShort: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat" ],
dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa" ],
weekHeader: "Wk",
dateFormat: "dd-M-y",firstDay: 0,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ""};
apex.jQuery.datepicker.setDefaults(apex.jQuery.datepicker.regional['en']);
});
现在,请注意该路径存在一些硬编码问题。有'/ i /',jquery版本和语言环境。关于jquery版本没什么可做的。
/i/
可以替换apex_img_dir
可以使用BROWSER_LANGUAGE
应用程序变量
$(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>');
这应该涵盖大部分内容。