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

标签 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 也被更改了。有什么想法吗?

最佳答案

如果你只想订阅一个改变的值,你可以订阅任何可观察对象:

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/

相关文章:

javascript - knockout JS : Dynamic tabs with dynamic content

java - javascript 中的城市/地址搜索自动完成

javascript - Firebase云函数: How to get the reference to the document with wildcard notation?

javascript - 如何使用js以编程方式为android/ios上的网站创建桌面快捷方式?

javascript - 如何使用网络语言将一个变量连接到另一个变量的名称

Knockout.js 和标签内的单选按钮需要单击两次

javascript - AppendChild 导致另一个节点的内部 HTML 消失

playframework - 服务端填充HTML模板,客户端更新

javascript - 在格式化数字后将插入符设置回原来的位置

knockout.js - 对返回的结果应用过滤器