Как Вы могли бы незаметно улучшить класс Datepicker jQuery?

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

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

Но Вы не можете вывести тот "+7" назад. При вызове getDate (), Вы получаете расчетную получающуюся дату.

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

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

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

5
задан Teflon Ted 15 March 2010 в 14:53
поделиться

3 ответа

2
ответ дан 14 December 2019 в 19:09
поделиться

это работает, основываясь на предложении @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
ответ дан 14 December 2019 в 19:09
поделиться

Вам не нужны 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);
        }
    });

Из отдела Научите человека ловить рыбу , я сделал Две вещи, чтобы узнать это:

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

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

1
ответ дан 14 December 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: