我有计算函数,它基本上应该监听可观察数组(项目)中的任何变化。问题是 Knockout 在初始化时调用了这个函数。我知道它这样做是为了找出它的依赖关系,但在我的例子中,这是一个问题,因为它发出了 ajax 请求。除了引入一些计数器变量以在第一次调用时跳过调用 ajax 之外还有什么解决方案吗? 谢谢。
function MyViewModel(data) {
var self = this;
self.nameToAdd = ko.observable("");
self.Items = ko.observableArray(data.items || []);
self.add = function () {
self.Items.push({ Name: self.nameToAdd()});
self.nameToAdd("");
};
self.remove = function (item) {
self.Items.remove(item);
};
ko.computed(function () {
$.ajax({
url: "myUrl",
type: 'POST',
data: ko.toJSON(self.Items),
contentType: 'application/json'
});
}, self);
}
最佳答案
我认为您真正想要的是手动订阅您的 Items 数组,以便在更新时调用 ajax 函数。
self.Items.subscribe(function(){
$.ajax({
url: "myUrl",
type: 'POST',
data: ko.toJSON(self.Items),
contentType: 'application/json'
});
});
传递的函数只会在数组本身发生变化时调用,因此不会在初始化时调用。参见 fiddle例如。
关于javascript - 在评估 computed() 时调用的依赖可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641635/