所以我一直在学习 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);
编辑
另外,有谁知道为什么当我试图通过可观察数组并提取客人值时,我会在控制台中获得一个函数?