我需要在ajax请求(异步ajax请求)后更新计算可观测值(过滤器),但计算可观测值(filterChanged)依赖于此可观测值(过滤器)当我在计算中更新可观测值时,在计算中发生无限循环?
如何在computed observable中更新依赖的可观测性?
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);
});
});
}发布于 2013-04-17 16:34:17
我不知道你为什么要用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计算属性,如果您的视图绑定到该属性,它将自动更新。
有关示例,请参阅this jsfiddle。
https://stackoverflow.com/questions/16055127
复制相似问题