在更新任何可观察的内容时,我在修改对象订阅时遇到一些麻烦。
以下是我正在使用的模型:
searchModel = function (startDate, endDate, searchTerm) {
var self = this;
self.StartDate = ko.observable(startDate);
self.EndDate = ko.observable(endDate);
self.SearchTerm = ko.observable(searchTerm);
};
这是我用来更新datepicker的observable的绑定处理程序:
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);
}
};
这是我用来初始化和订阅搜索模型的扩展程序函数:
ko.extenders.getEvents = (function (target, options) {
function getEvents(target) {
console.log(target);
};
getEvents(target());
target.subscribe(getEvents);
return target;
});
任何帮助都将被赞赏...简而言之,我希望页面使用默认的可观察模型值(下面)进行初始化,并且每当对象中的任何可观察对象都更新时,订阅就会触发,因此我可以&# 39;做东西'。
this.SearchCriteria = ko.observable(new searchModel('', '', '')).extend({
getEvents: null
});
以下是我正在使用的内容:JSFiddle
答案 0 :(得分:1)
您的bindingHandler未处理“changeDate”事件。这发生在$(document).ready。
中不确定这是否是您要找的,但是,我会略微改变它。我将敲除绑定在searchModel上并将bindingHandler移出。然后,您可以通过searchModel函数“执行操作”。
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor() || {};
$(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);
}
};
var searchModel = function() {
var self = this;
self.startDate = ko.observable();
self.endDate = ko.observable();
self.searchTerm = ko.observable();
};
var search = new searchModel();
ko.applyBindings(search);
$('#datepicker1').datepicker();
$('#datepicker2').datepicker();