Knockout datepicker default
by cillay
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.3/css/base/minified/jquery-ui.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.2/underscore.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/2.1.0/knockout-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.3.2/knockout.mapping.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/amplifyjs/1.1.0/amplify.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/1.7.2/moment.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.9.0/jquery.validate.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.3.1/jquery.maskedinput.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/qtip2/2.0.1/jquery.qtip.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/qtip2/2.0.1/jquery.qtip.css">
<input id="txt_ExpirationDate"
data-bind="datepicker: Client.ExpirationDate, datepickerOptions: { minDate: MinExpirationDate() }"
/>
<button id="btnAdd">Add New</button>
<button id="btnUpdate">Update</button>
JavaScript
// From RP Niemeyer - http://stackoverflow.com/a/6400701
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().datepickerOptions || {};
$(element).datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
var observable = valueAccessor();
observable($(element).datepicker("getDate"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).datepicker("destroy");
});
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
current = $(element).datepicker("getDate");
if (value - current !== 0) {
$(element).datepicker("setDate", value).val($.datepicker.formatDate("mm/dd/yy", value));
}
}
};
var UpdateModel = {
Client: {
Name: "John Q Public",
ExpirationDate: ko.observable(new Date(2005, 8, 30))
},
MinExpirationDate: function () {
var tomorrow = new Date();
tomorrow.setHours(24,0,0,0);
return tomorrow;
}
};
var AddModel = {
Client: {
Name: null,
ExpirationDate: null
},
MinExpirationDate: function () {
var tomorrow = new Date();
tomorrow.setHours(24,0,0,0);
return tomorrow;
}
};
$("#btnAdd").on("click", function() { ko.applyBindings(AddModel); });
$("#btnUpdate").on("click", function() { ko.applyBindings(UpdateModel); });