55 votes

Boucle dans le moteur de template Jade (actuellement connu sous le nom de "Pug")

Je veux utiliser une boucle simple comme for(int i=0; i<10; i++){} .

Comment l'utiliser dans le moteur Jade ? Je travaille avec Node.js et utilise le framework expressjs.

90voto

qiao Points 7444

Par exemple :

- for (var i = 0; i < 10; ++i) {
  li= array[i]
- }

vous pouvez voir https://github.com/visionmedia/jade pour un document détaillé.

0 votes

Salut qiao, j'ai un problème ici : LIEN J'ai résolu le problème par l'intermédiaire de <strong>alessioalex</strong>, mais maintenant j'ai un nouveau problème : Si avec ma structure de base de données comme ça, alors 1 album je peux stocker beaucoup de chansons, est-ce exact ? Et pourquoi dans app.js faire : var Album = db.model('Album'); var album = new Album(); album.songs.push({_id:'4f046b3bf71f5ed522000002'}); <br/>et j'obtiens l'erreur Cannot call method 'call' of undefined <br/>comment puis-je stocker à droite ?

1 votes

C'est probablement parce que le SongSchema n'est pas défini dans album.js .

0 votes

J'ai un tableau x, console.log(x, x.length) ; me montre ceci : [{nom:a,fait:true},{nom:c}] 0 est-ce normal ? qu'est-ce que j'ai oublié ?

75voto

Dark Passenger Points 18408

En utilisant le nœud, j'ai une collection de trucs @stuff et y accéder comme ceci :

- each stuff in stuffs
  p
    = stuff.sentence

4 votes

C'est la manière canonique de faire cela selon jade-lang.com/reference/iteration . De plus, vous n'avez pas vraiment besoin de l'option - devant le each sur la première ligne, soit

1 votes

Les erreurs de carlin si vous avez un - (tiret) devant chaque.

0 votes

Pouvez-vous expliquer @stuff ? Pourquoi y a-t-il un @ au début ?

17voto

Mohsen Points 16856

Voici une méthode très simple jade qui ont une boucle dans le fichier. Jade est très sensible aux espaces blancs. Après la ligne de définition de la boucle ( for ) vous devez donner une indentation (tabulation) aux éléments qui veulent aller à l'intérieur de la boucle. Vous pouvez le faire sans {} :

- var arr=['one', 'two', 'three'];
- var s = 'string';
doctype html
html
    head
    body
        section= s
        - for (var i=0; i<3; i++)
            div= arr[i]

0 votes

Avez-vous une idée de la manière de supprimer les espaces entre les éléments générés de cette manière ?

0 votes

@vsync Une astuce serait d'utiliser span au lieu de div

0 votes

Je veux dire généralement. il y aurait toujours un espace blanc entre les éléments de cette façon parce qu'il y a une new line parce que par la façon dont la syntaxe de Jade fonctionne.

10voto

k00k Points 1594

J'ajoute juste une autre possibilité car cela pourrait aider quelqu'un qui essaie à la fois d'itérer sur un tableau ET de maintenir un compte. Par exemple, le code ci-dessous parcourt un tableau nommé items et n'affiche que les 3 premiers éléments. Remarquez que le each y el if sont des jades natifs et n'ont pas besoin de trait d'union.

ul
  - var count = 0;
  each item in items
    if count < 3
      li= item.name
    - count++;

0 votes

Merci beaucoup pour cela : - count++;

6voto

SqrBrkt Points 55

Vous pouvez également accélérer les choses avec un while boucle (voir ici : http://jsperf.com/javascript-while-vs-for-loops ). Il est également beaucoup plus concis et lisible, selon moi :

i = 10
while(i--)
    //- iterate here
    div= i

2 votes

Oui, mais votre boucle while commence avec 10 et va vers le bas. Cela ajoute les éléments au DOM dans l'ordre inverse. Tu ne veux probablement pas ça.

0 votes

@PhillipBurch il peut être inversé aussi : var i = 0; while (i++ < 10) console.log(i-1) //=> 0123456789

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X