虽然@amakhrov的答案将会工作(如果使用可写的计算的可观察性,如@Stijn所示),我决定使用
Custom Bindings这样做.
这样做的主要优点是可重用性 – 我只需要使用data-bind =“datePicker:MyDate”,我想要绑定它.我还可以修改输入元素的其他属性,因此如果绑定到复杂的jQuery(和其他)控件.
HTML
JS
ko.bindingHandlers.datePicker = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
// Register change callbacks to update the model
// if the control changes.
ko.utils.registerEventHandler(element, "change", function () {
var value = valueAccessor();
value(new Date(element.value));
});
},
// Update the control whenever the view model changes
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var value = valueAccessor();
element.value = value().toISOString();
}
};
var viewModel = {
MyDate : ko.observable(new Date())
};
ko.applyBindings(viewModel);