ForgeTotal.js 5
de

Total.js 5

Zwei Listen mit DIFFARR vergleichen: was hinzuzufügen, zu aktualisieren und zu entfernen ist

Total.js 5 · total5@0.0.19 utilitiesarraysforms Mit Total.js 5 ausgeführt

DIFFARR(property, saved, submitted) vergleicht zwei Arrays von Objekten anhand einer Eigenschaft und gibt ein Objekt mit drei Listen zurück:

  • add: die Objekte aus submitted, deren Eigenschaft nicht in saved vorkommt
  • upd: für die Objekte, die in beiden vorkommen, { db, form } mit dem gespeicherten und dem gesendeten Objekt
  • rem: die Werte der Eigenschaft (nicht die Objekte) der Einträge aus saved, die nicht in submitted sind

Das ist der übliche Schritt beim Speichern einer bearbeitbaren Liste: Das Formular sendet die ganze Liste, und du musst wissen, was neu angelegt, was geändert und was gelöscht wurde. Die Werte werden mit == verglichen, daher sind 1 und '1' derselbe Eintrag.

controllers/lists.js
const saved = [
	{ id: 1, name: 'Book' },
	{ id: 2, name: 'Pen' },
	{ id: 3, name: 'Lamp' }
];

exports.install = function() {
	ROUTE('POST /sync/', sync);
};

function sync($) {
	const diff = DIFFARR('id', saved, $.body.items);
	$.json({
		add: diff.add,
		update: diff.upd.map(n => ({ id: n.db.id, from: n.db.name, to: n.form.name })),
		remove: diff.rem
	});
}