0

所以我一直在学习 Knockout.js 并且非常喜欢它。我正在使用它将一些 SQL 交互添加到我正在处理的活动网站上的来宾列表中。我正在使用destroy来标记要删除的条目,并通过在PHP中使用'isset'将它们标记为在数据库中删除。

我想添加某种功能来在更新记录时做同样的事情。当我将 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 回答