現在、私はノックアウト 2.1.0 を使用しています。次の日付ピッカー バインディングは、観測不可能な値に対して完全に機能します。ノックアウト 3.0 を更新すると、機能しません。
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
// Get the options from the binding.
var options = allBindingsAccessor().datepickerOptions || {};
$(element)
.datepicker(options)
.bind("change", function() {
ko.bindingHandlers.datepicker.updateValue(element, valueAccessor, allBindingsAccessor);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).datepicker("destroy");
});
},
update: function(element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
// If the date is coming from a Microsoft webservice.
if (typeof value === "string" && value.indexOf('/Date(') === 0) {
value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
}
var currentDate = $(element).datepicker("getDate");
// Check if the date has changed.
if (value && value - currentDate !== 0) {
$(element).datepicker("setDate", value);
}
},
updateValue: function(element, valueAccessor, allBindingsAccessor) {
var observable = valueAccessor(),
dateValue = $(element).datepicker("getDate");
// Two-way-binding means a writeable observable.
if (ko.isWriteableObservable(observable)) {
observable(dateValue);
return;
}
if (allBindingsAccessor()._ko_property_writers) {
allBindingsAccessor()._ko_property_writers.datepicker(dateValue);
}
}
};
コードをデバッグすると、allBindingsAccessor()._ko_property_writers
未定義であることがわかりました。そのため、観察できない値を更新できません。
3.0バージョンの上記のコードの解決策を誰かに提案してもらえますか
以下の例を使用して、カスタムバインディングを変更しましたが、うまく機能しています。更新されたフィドルを見つけてください