更新computed observable中依赖的observable

update depended observable in computed observable

本文关键字:observable 依赖 更新 computed      更新时间:2023-09-26

我需要在ajax请求(异步ajax请求)后更新可观察对象值(过滤器),但是计算可观察对象(filterChanged)依赖于这个可观察对象(过滤器),当我在计算中更新可观察对象时,在计算中发生了无限循环?

如何在computed observable中更新dependentobservable ?

function vm(){
    var self = this;
    self.filter = ko.observable();
    self.isOpenFilter = ko.observable(false);
    self.result = ko.obseravableArray([]);
    self.filterChanged = ko.computed(function(){
            var data = {filter:self.filter(),isOpen:self.isOpenFilter()}

        $.ajax("/service",data,function(response){
            self.result(ko.mappings.fromJS(response.results);
            self.filter(response.filter);   // infinite loop
                    self.isOpenFilter(response.isOpen);
        });
    });
}

我不知道你为什么使用ko.computed。这样更有意义:

function vm() {
    var self = this;
    self.filter = ko.observable("default filter");
    self.result = ko.observableArray([]);
    self.updateFilter = function() {
        var filter = self.filter();
        $.ajax("/service",
               {filter:filter},
               function(response){
                   self.result(ko.mappings.fromJS(response.results));
                   self.filter(response.filter);
               });
    };
}

如果你调用updateFilter从服务器获得更新,它将改变filter计算属性,如果你的视图绑定到该属性,它应该自动更新。