在Knockout.js中向对象添加其他数据

时间:2012-10-19 01:06:54

标签: json data-binding knockout.js data-objects

所以我一直在学习Knockout.js,而且我正在挖掘它。我正在使用它将一些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);

修改

另外,有没有人知道为什么当我试图通过可观察数组并提取guest值时,我会在控制台中找到一个函数?

1 个答案:

答案 0 :(得分:1)

使用计算机来确定客户对象是否脏(即已编辑)。以下是有关如何操作的完整指南:

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

然后,您只需提交_isDirty()为真的那些。