Bind bootstrap datepicker с нокаутом
Я хочу использовать bootstrap datepicker и привязать выбранную дату с помощью knockoutjs.
функция, использующая datepicker:
$(function() {
// create the departure date
$('#depart-date').datepicker({
autoclose: true,
format: 'yyyy/mm/dd',
}).on('changeDate', function(ev) {
ConfigureReturnDate();
});
$('#return-date').datepicker({
autoclose: true,
format: 'yyyy/mm/dd',
startDate: $('#depart-date').val()
});
// Set the min date on page load
ConfigureReturnDate();
// Resets the min date of the return date
function ConfigureReturnDate() {
$('#return-date').datepicker('setStartDate', $('#depart-date').val());
}
});
Вот скрипка, которую я хочу использовать, но не знаю, как это сделать.
http://jsfiddle.net/zNbUT/276/
Ответы
Ответ 1
Я нашел скрипку, которая поможет мне
http://jsfiddle.net/jearles/HLVfA/6/
Функциональность скрипта:
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().datepickerOptions || {};
$(element).datepicker(options).on("changeDate", function (ev) {
var observable = valueAccessor();
observable(ev.date);
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).datepicker("setValue", value);
}
};
Ответ 2
Я также использовал bootstrap-datepicker.js, но по-другому:
Моя модель просмотра:
var MyDataViewModel = {
//Set Todays Date
StartDate: ko.observable(new Date())
}
Мой HTML:
<div id="dtpDate" class="input-append">
<input required="required" id="txtdtpDate" data-format="yyyy-MM-dd" type="text" style="width: 75%;" />
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
И JS, чтобы заставить его функционировать:
$(function () {
$('#dtpDate').datetimepicker({
pickTime: false
})
.on('changeDate', function (ev) {
//Date.Subtring(1,10) for formatting purposes
MyDataViewModel.StartDate(ko.toJSON(ev.date).substr(1, 10));
});
});
});
И это отлично работает для меня