0

だから私はKnockout.jsを学んでいて、本当にそれを掘り下げています. 私が取り組んでいるイベント Web サイトのゲスト リストに SQL インタラクションを追加するために使用しています。私はdestroyを使用して削除のエントリをマークし、PHPで「isset」を使用してDBで削除済みとしてマークすることでそれを処理しています。

レコードが更新されたときに同じことを行う何らかの機能を追加したいと考えています。JSONをサーバーに送り返すときに実際に変更されていない場合、すべてのレコードを更新する必要はないようです(最大で300の更新しか話していないことを知っていても). Knockout の使用経験が豊富な人が私を助けてくれれば、非常にありがたいです。

これが私のjavascriptです。マークアップとデータ バインディングはかなり基本的なものなので、含めません。

function Guest(data){
    this.id = ko.observable(data.id);
    this.name = ko.observable(data.name);
    this.email = ko.observable(data.email);
    this.guests = ko.observable(data.guests);
    this.code = ko.observable(data.code);
}

function guestListViewModel(){
    //Data
    var self = this;
    self.guests = ko.observableArray([]);
    self.guestsNumber = 0;

    $.getJSON('/php/guests_json.php', function(json) {
        var mappedGuests = $.map(json, function(item) { return new Guest(item) });
        self.guests(mappedGuests);
        self.guestsNumber = (self.guests().length);
        $('.dlt_btn').button();

    });

    self.removeGuest = function(guest) { 
        self.guests.destroy(guest);
    };

    self.save = function() {
        var data = 'json=' + ko.toJSON({guests: self.guests });
        $.ajax("/php/save_guests.php", {
            data: data,
            type: "post",
            success: function(result) {$('#server').html(result)}
        })
    }

    self.totalGuests = ko.computed(function() {
        var total = 0;
        ko.utils.arrayForEach(self.guests(), function(guest) {
            var value = guest.id;
            console.log(value);
            if (!isNaN(value)) {
                total += value;
            }
        });
        return total;        
    });

}

ko.applyBindings(new guestListViewModel);

編集

また、監視可能な配列を調べてゲストの値を取り出そうとしているときに、代わりにコンソールで関数を取得する理由を知っている人はいますか?

4

1 に答える 1

1

ゲスト オブジェクトを、それらがダーティ (つまり、編集済み) かどうかを判断する計算でラップします。これを行う方法の完全なガイドは次のとおりです。

http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

次に、真である人を提出するだけ_isDirty()です。

于 2012-10-19T01:19:53.633 に答える