在值更改时调用自定义方法

时间:2011-11-16 14:06:28

标签: javascript knockout.js

有没有办法一次调用某些方法改变值?我为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也会被更改。有什么想法吗?

1 个答案:

答案 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
            }
        }
    }
}
相关问题