最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Invoke custom method on value changed - Stack Overflow

programmeradmin1浏览0评论

Is there a way to invoke one time some method on value changed? I created wrapper for bindingHandlers.value that invoke this method:

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();
    }
}

Unfortunatelly when I change some value myMethod is called two times becuase e dependencyObservable is also changed. Any ideas?

Is there a way to invoke one time some method on value changed? I created wrapper for bindingHandlers.value that invoke this method:

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();
    }
}

Unfortunatelly when I change some value myMethod is called two times becuase e dependencyObservable is also changed. Any ideas?

Share Improve this question edited Nov 16, 2011 at 14:12 Reporter 3,9365 gold badges35 silver badges49 bronze badges asked Nov 16, 2011 at 14:06 Sławomir RosiekSławomir Rosiek 4,0733 gold badges28 silver badges44 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

If you just want to subscribe to a value changed, you can subscribe to any observable:

var viewModel = { property: ko.observable() };

viewModel.property.subscribe(function(newValue) {
    //do stuff
});

To subscribe to all properties of an object you could do something like:

function subscribeAll(viewModel) {
    for(var propertyName in viewModel) {
        if(viewModel[propertyName].subscribe === 'function') {
            viewModel[propertyName].subscribe(function(newValue) {
                //do stuff
            }
        }
    }
}
发布评论

评论列表(0)

  1. 暂无评论