我正在使用带有DataObjectManager的SilverStripe 2.4.7。我正在尝试为弹出窗口添加我自己的自定义验证,但奇怪的事情仍在发生。当我添加自己的Javascript类时,弹出窗口上的日期选择器停止工作。我无法弄清楚为什么,因为我添加的Javascript未应用于数据选择器。
我正在使用
function getRequirementsForPopup() {
Requirements::javascript('mysite/code/js/jquery.js');
Requirements::javascript('mysite/code/js/validation.js');
}
添加我自己的Javascript类。这在另一个弹出窗口中运行良好但是没有一个日期选择器。我的印象是,向CMS添加自定义Javascript没有问题,所以我想知道它是否与DataObjectmanager中的Javascript或日期选择器发生冲突。
我很感激任何人都能给我的建议。我在SilverStripe上看过其他一些关于Javascript的帖子,但是他们没有解决这里发生的事情。
感谢。
答案 0 :(得分:2)
dataobject_manager加载自己的jquery文件。当您添加ownsfile时,它会与dataobject_manager中的现有文件发生冲突。
您可以查看从firebug加载的库。为了做到这一点,
现在回到你的问题,如果你想使用现有的加载JQuery,那么添加带有验证码的自定义文件。否则,以下是如何显示自定义时间选择器(http://trentrichardson.com/examples/timepicker/)
的示例首先,如果您打算使用自己的jquery文件,则必须从dataobject_manager停止/阻止jquery文件。在getRequirementsForPopup()函数中有类似的东西。注意:在看到firebug中加载的文件后,它取决于要加载哪些文件以及要禁用哪个文件。
要求::块( “http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js”); 要求::块( “dataobject_manager / JavaScript的/ dom_jquery_ui.js”); 要求::块( “蓝宝石/第三方/ jQuery的UI / jquery的-UI-1.8rc3.custom.js”); 要求::块( “dataobject_manager / JavaScript的/ dataobject_manager.js”);` 要求::块( “dataobject_manager / JavaScript的/ dataobject_manager_popup.js”);
然后,您必须包含自己的jquery文件
要求::的JavaScript( 'azeem / JavaScript的/ jQuery的UI / JS / jQuery的1.7.2.min.js');
要求::的JavaScript( 'azeem / JavaScript的/ jQuery的UI / JS / jquery的-UI-1.8.23.custom.min.js');
要求::的JavaScript( 'azeem / JavaScript的/ timepicker / jquery的-UI-timepicker-addon.js');
要求::的JavaScript( 'azeem / JavaScript的/ timepicker / azeem-timepicker.js');
要求:: CSS( 'azeem / JavaScript的/ jQuery的UI / CSS /平滑度/ jquery的-UI-1.8.23.custom.css');
要求:: CSS( 'azeem / CSS / timepicker / jquery的-UI-timepicker-addon.css');
此处azeem-timepicket.js包含您要添加到字段的自定义代码
//JQuery UI datepicker and timepicker for azeem Event End Date/Time Field
$j('#DataObjectManager_Popup_AddForm_EventEndDate-date, #DataObjectManager_Popup_DetailForm_EventEndDate-date').datepicker({
dateFormat: 'dd/mm/yy'
});
$j('#DataObjectManager_Popup_AddForm_EventStartDate-time, #DataObjectManager_Popup_DetailForm_EventStartDate-time').timepicker({
timeFormat: 'hh:mm'
});
在getCMSFields()函数中,如果使用日期/日期时间字段,则必须禁用默认日期选择器选项。
$ startDate = new DatetimeField('StartDate','Start Date / Time'); $ startDateField = $ startDate-> getDateField(); $ startDateField-> setConfig('showcalendar',false); $ startTimeField = $ startDate-> getTimeField(); $ startTimeField-> setConfig('showdropdown',false); $ fields-> addFieldsToTab('Root.Main',$ startDate);
您可以在firebug中再次验证,无论您是自定义还是所有其他文件都在加载。您可以为自己的验证做同样的事情。
希望它会有所帮助。