2

我有计算函数,它基本上应该监听可观察数组(项目)中的任何变化。问题是 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);
}
4

1 回答 1

1

我认为您真正想要的是手动订阅您的 Items 数组,以便在更新时调用 ajax 函数。

self.Items.subscribe(function(){
    $.ajax({
        url: "myUrl",
        type: 'POST',
        data: ko.toJSON(self.Items),
        contentType: 'application/json'
    });
});

仅当数组本身发生更改时才会调用传递的函数,因此不会在初始化时调用。例如,参见小提琴。

于 2012-09-28T14:25:11.383 回答