Как вы можете незаметно улучшить класс jQuery Datepicker? - PullRequest
5 голосов
/ 15 марта 2010

Вы можете передать специальные строки в метод setDate () класса jQuery класса Datepicker, например "+7", который будет переведен в "7 дней с сегодняшнего дня":

http://docs.jquery.com/UI/Datepicker#method-setDate

Но вы не можете получить это "+7" обратно. Когда вы вызываете getDate (), вы получаете вычисленную итоговую дату.

У меня есть сценарий использования, когда мне нужно вытащить специальную строку "+7" для распространения. Один кусок кода передает специальную строку в Datepicker и передает Datepicker другому фрагменту кода, который извлекает дату, но последний иногда должен знать специальную строку, а не вычисляемую дату.

Поэтому мне нужно усовершенствовать инструмент Datepicker, чтобы (а) хранить специальный код внутри и (б) открывать его с помощью метода, подобного getOriginallyPassedInDate () или некоторого такого.

Я не ниндзя jQuery / Javascript, поэтому я мог бы действительно использовать некоторые рекомендации о том, как я могу предпочтительно - ненавязчиво добавить необходимую функциональность к классу Datepicker, как я могу предположить, что вы можете сделать патч для объекта в Ruby .

Ответы [ 3 ]

2 голосов
/ 15 марта 2010

это работает, основываясь на предложении @ petersendidit:

// http://paulirish.com/2010/duck-punching-with-jquery/
(function($){
  var _raw = null;
  var _old = $.fn.datepicker;
  $.fn.datepicker = function(arg1, arg2){
    if('getRawDate'==arg1){
      return _raw;
    } else {
      if('setDate'==arg1){
        _raw = arg2;
      }
      return _old.apply(this, arguments);
    }
  };
})(jQuery);
2 голосов
/ 15 марта 2010
1 голос
/ 15 марта 2010

Вам не нужно Duck Punch или Monkey Patch.

Если я использую jQuery UI v1.8rc3, то для установки даты по умолчанию будет defaultDate, а не setDate, как указано в документации. Его можно получить в onSelect или onClose fn, например:

    $('.pick-date').datepicker({
        showWeek: true,
        weekHeader: 'W#',
        defaultDate: "+9",
        onSelect: function(dateText, inst) {
            alert("Select: inst.defaultDate = " + inst.settings.defaultDate);
        },
        onClose: function(dateText, inst) {
            alert("Close: inst.defaultDate = " + inst.settings.defaultDate);
        }
    });

Из отдела Teach-a-man-to-fish я сделал 2 вещи, чтобы выучить это:

  1. Я посмотрел в исходном коде для выбора даты. Он ясно показывает параметр defaultDate, который задокументирован для принятия +/- N для смещения. У него нет опции setDate.

  2. Я запустил страницу в отладчике и поместил перерыв в функцию onClose. Там я смог записать параметр inst и увидел, что там хранятся настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...