有没有办法一次调用某些方法改变值?我为bindingHandlers.value创建了一个调用此方法的包装器:
var update = bindingHandlers.value.update;
bindingHandlers.value.update = function(element, valueAccessor, allBindingAccessor, viewModel) {
var newValue = ko.utils.unwrapObservable(valueAccessor());
var elementValue = ko.selectExtensions.readValue(element);
var valueHasChanged = (newValue != elementValue);
update(element, valueAccessor, allBindingAccessor, viewModel);
if (valueHasChanged) {
myMethod();
}
}
不幸的是,当我更改某个值myMethod被调用两次时,来自dependencyObservable也会被更改。有什么想法吗?
答案 0 :(得分:8)
如果您只想订阅更改的值,您可以订阅任何observable:
var viewModel = { property: ko.observable() };
viewModel.property.subscribe(function(newValue) {
//do stuff
});
要订阅对象的所有属性,您可以执行以下操作:
function subscribeAll(viewModel) {
for(var propertyName in viewModel) {
if(viewModel[propertyName].subscribe === 'function') {
viewModel[propertyName].subscribe(function(newValue) {
//do stuff
}
}
}
}