J'utilise la fonction triable de l'interface utilisateur de Jquery ( source ) pour réorganiser les éléments. J'ai construit des callbacks personnalisés pour créer une liste de ces éléments. Ainsi, lorsque je déplace un élément, tous les éléments reçoivent un nouvel identifiant de position. Cela pourrait ressembler à ceci :
[{
id_of_element_in_database: 12,
new_position: 0
}, {
id_of_element_in_database: 16,
new_position: 1
}, {
id_of_element_in_database: 14,
new_position: 2
}]
J'envoie cette liste à mon back-end en faisant un simple Poste d'Ajax
$.post('/position', { data: list });
Route
router.post('/position', (req, res) => {
console.log(req.body.data); // This prints the array of objects above.
});
Schéma
mongoose.Schema({
id: Number,
position: Number,
...
});
Maintenant, je n'arrive pas à trouver comment modifier efficacement la position de tous les documents. Créer une boucle merdique du tableau et faire de multiples requêtes à la base de données ne peut pas être la meilleure approche.
J'ai essayé ça ici et ça ne me semble pas correct.
for (let i in req.body.data) {
collection.update({ id: req.body.data[i].id }, { position: req.body.data[i].position });
Il doit y avoir quelque chose d'autre que je puisse faire pour y parvenir. J'ai essayé de consulter Google sans succès.