J'ai une application JS côté client qui doit charger un modèle pour afficher chaque élément. Disons que ce sont des notes.Chargement du gabarit asynchrone - Comment charger une seule fois?
Le problème est dans la partie asynchrone. Je ne peux pas faire en sorte que le modèle ne soit chargé qu'une seule fois. Il se charge chaque fois qu'une note appelle la fonction render
.
Voici un code:
var notes = [ {}, {}, {} ] // Some Note objects
notes.forEach(function(note) {
render(note)
}
// Have some variable to hold the template
var template
// Now on the render function
function render(note) {
// First, if the template exists, go straight to the next function
if (template) {
// The display function takes care of appending the note
// to the body after applying datas on the template
display(note)
}
else {
// loadTemplate just loads the template in an ajax request
// and executes the callback with the template as argument
loadTemplate(function(data) {
// I fill in the template variable
template = data
// And I display the note since the template is available
display(note)
})
}
}
Donc, dans ce cas, il va charger trois fois le modèle, bien qu'il y ait un contrôle pour empêcher cela. Je suppose que c'est parce que les trois modèles vont directement dans l'autre, mais comment puis-je empêcher cela?
Je ne veux pas utiliser le chargement sync ajax car cela gèlera le navigateur.
Édition: à la fin, j'ai utilisé la solution @ Managu, légèrement modifiée.
Au lieu d'utiliser sa boucle, je l'ai utilisé ce qui suit, beaucoup plus élégante:
while (backlog.length) {
display(backlog.shift())
}
Comment '.lodaTemplate' sait-il quel modèle charger? – Esailija
Parce qu'il n'y a qu'un seul modèle à charger pour le moment dans cette application. –