在SilverStripe 2.4.7中使用Javascript

时间:2012-12-10 15:05:42

标签: javascript jquery silverstripe

我正在使用带有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的帖子,但是他们没有解决这里发生的事情。

感谢。

1 个答案:

答案 0 :(得分:2)

dataobject_manager加载自己的jquery文件。当您添加ownsfile时,它会与dataobject_manager中的现有文件发生冲突。

您可以查看从firebug加载的库。为了做到这一点,

  1. 打开萤火虫
  2. 点击“脚本”
  3. 点击“内联”,会出现一个下拉列表。如果键入jq,则将显示包含jq名称的所有文件。它可以让您了解正在加载的内容。
  4. 现在回到你的问题,如果你想使用现有的加载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中再次验证,无论您是自定义还是所有其他文件都在加载。您可以为自己的验证做同样的事情。

    希望它会有所帮助。