所以我一直在学习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值时,我会在控制台中找到一个函数?
答案 0 :(得分:1)
使用计算机来确定客户对象是否脏(即已编辑)。以下是有关如何操作的完整指南:
http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html
然后,您只需提交_isDirty()
为真的那些。