ここにあるソリューションを使用しています:
jQuery UI datepicker 変更イベントが KnockoutJS によってキャッチされない
ページに多数の日付ピッカー コントロールがあります。1 つが変更されると、すべての変更イベントが発生します。
RefreshData は、日付範囲が変更されたときに ViewModel のデータを更新するカスタム関数です。
何が欠けていますか - これを適切に機能させるために非常にイライラする午後でした
これが私のノックアウトバインディングです:
ko.bindingHandlers.datepicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || {};
$(element).datepicker(options);
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
observable($(element).datepicker("getDate"));
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).datepicker("destroy");
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var current = $(element).datepicker("getDate");
if (value - current !== 0) {
$(element).datepicker("setDate", value);
}
RefreshData(element.id); //Should only fire once, but is firing for every datepicker on the page
}
};