Vous pourriez écrire une liaison personnalisée qui définit la date dans le champ à l'aide des API de sélecteur de date et qui définit également la valeur de votre observable en lisant correctement la date.
La reliure personnalisée pourrait ressembler à ceci :
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || {},
$el = $(element);
//initialize datepicker with some optional options
$el.datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
var observable = valueAccessor();
observable($el.datepicker("getDate"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$el.datepicker("destroy");
});
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
$el = $(element),
current = $el.datepicker("getDate");
if (value - current !== 0) {
$el.datepicker("setDate", value);
}
}
};
Vous l'utiliseriez comme :
<input data-bind="datepicker: myDate, datepickerOptions: { minDate: new Date() }" />
El datepickeroptions
est facultatif et peut inclure tout ce que vous voulez passer dans l'option datepicker()
appeler.
En outre, cela suppose que vous utilisez un observable pour la date. La liaison doit faire un peu plus de travail si vous voulez faire une liaison à sens unique avec une non-observable, mais c'est peu probable.
Un échantillon ici : http://jsfiddle.net/rniemeyer/NAgNV/