有没有办法在某个值发生变化时调用某个方法?我为调用此方法的 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 也被更改了。有什么想法吗?
最佳答案
如果你只想订阅一个改变的值,你可以订阅任何可观察对象:
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
}
}
}
}
关于javascript - 在值更改时调用自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152938/