2

基本的に監視可能な配列(Items)の変更をリッスンする計算関数があります。問題は、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 に答える