2010-03-15 1 views
5

È possibile passare stringhe speciali in Datepicker classe setDate di jQuery() come "sette" che sarà tradotta in "7 giorni a partire da oggi":Come potresti migliorare in modo discreto la classe jQuery Datepicker? Metodo

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

Ma non si può ottenere che "+ 7 "indietro. Quando chiami getDate() ottieni la data risultante calcolata.

Ho un caso d'uso in cui ho bisogno di estrarre la stringa speciale "+7" per la propagazione. Una porzione di codice passa una stringa speciale nel Datepicker e passa il Datepicker a un altro pezzo di codice che estrae la data, ma quest'ultimo a volte ha bisogno di conoscere la stringa speciale piuttosto che la data calcolata.

Quindi ho bisogno di migliorare lo strumento Datepicker per (a) memorizzare il codice speciale internamente e (b) esporlo tramite un metodo come getOriginallyPassedInDate() o alcuni di questi.

Non sono un jQuery/Javascript ninja quindi potrei davvero usare alcune indicazioni su come preferibilmente aggiungere, in modo discreto, le funzionalità necessarie alla classe Datepicker, il modo in cui potresti eseguire il patch di scimmia su un oggetto in Ruby indovinare.

risposta

1

Non è necessario Duck Pugno o scimmia Patch.

Se utilizzo l'interfaccia utente jQuery v1.8rc3, l'opzione per impostare la data predefinita è defaultDate, non setDate come indicato dalla documentazione. Può essere recuperate nelle onSelect o onClose fn, in questo modo:

$('.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); 
     } 
    }); 

Dal reparto Teach-a-man-to-fish, ho fatto 2 cose da imparare questo:

  1. ho guardato nel codice sorgente per datepicker. Mostra chiaramente un'opzione defaultDate, che è documentata per accettare +/- N per l'offset. Non ha un'opzione setDate.

  2. Ho eseguito la pagina nel debugger e ho inserito un'interruzione nella funzione onClose. Lì potevo inserire il parametro inst e ho visto che le impostazioni erano memorizzate lì.

2

questo funziona, basata su suggerimento di @ 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);