Mustache.js: Itérer sur les paires clé/valeur d'objet ?

Créé le 28 mai 2015  ·  11Commentaires  ·  Source: janl/mustache.js

Est-il possible d'itérer sur les paires clé/valeur d'un objet ?

Considérez cet exemple :

var values = {
  'single': 'Single bed',
  'double': 'Double bed',
  'twin': 'Twin beds'
};

Code handlebar.js équivalent :

<select name="bed_type">
{{#values}}
  <option value="{{@key}}">{{this}}</option>
{{/values}}
</select>

Je n'ai pas trouvé le moyen de le faire avec moustache.js

Merci.

Commentaire le plus utile

Autoriser l'itération sur un objet simple introduit-il vraiment de la logique dans une vue moustache ? Mon argument serait non. Je suis un fan du principe sans logique, mais nous pouvons déjà itérer des tableaux, je suis d'accord avec l'OP que c'est inutilement gênant. Considérez l'exemple suivant :

J'aimerais que mes données soient :

"attr": {
  "class": "foo",
  "href": "/somewhere"
}

Mais ça doit être :

"attr": [
  {
    "key": "class",
    "value": "foo"
  },
  {
    "key": "href",
    "value": "/somewhere"
  }
]

Rendre:

<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>

Tous les 11 commentaires

Salut @chlab !

Au lieu de transmettre vos données directement au moteur de rendu, vous devez les formater en un objet view . Ou utilisez un assistant personnalisé. Il y a quelques idées sur ces threads stackoverflow :

http://stackoverflow.com/questions/9058774/handlebars-mustache-is-there-a-built-in-way-to-loop-through-the-properties-of
http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-moustache-js

Faites-nous savoir si ce n'est toujours pas clair. Acclamations!

Merci @dasilvacontin.
Cela semble être une façon assez maladroite de le faire, non? Quel est le raisonnement derrière cela? Ne serait-ce pas beaucoup plus simple à la manière du guidon ?
Acclamations

@chlab C'est un principe fondamental de Moustache. Toute la logique doit être extraite dans une vue, qui n'est pas la même qu'un modèle. Dans ce cas, cela semble plus gênant car c'est juste un peu de logique, mais c'est une pente glissante que Moustache ne vous laisse même pas descendre :)

Assez juste. Merci pour l'explication!

Le principe fondamental auquel il a été fait référence à l'origine rend Moustache trop opiniâtre, je ne veux pas toujours organiser une phase de conversion séparée pour faire plaisir à Moustache...

Autoriser l'itération sur un objet simple introduit-il vraiment de la logique dans une vue moustache ? Mon argument serait non. Je suis un fan du principe sans logique, mais nous pouvons déjà itérer des tableaux, je suis d'accord avec l'OP que c'est inutilement gênant. Considérez l'exemple suivant :

J'aimerais que mes données soient :

"attr": {
  "class": "foo",
  "href": "/somewhere"
}

Mais ça doit être :

"attr": [
  {
    "key": "class",
    "value": "foo"
  },
  {
    "key": "href",
    "value": "/somewhere"
  }
]

Rendre:

<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>

Salut les gars,

Comment puis-je itérer une liste anonyme? J'ai essayé d'utiliser {{#.}} et {{/.}} mais cela ne fonctionne pas.

Merci

Pour itérer une liste anonyme

let facts = doc.data(); res.render('index', {facts});

<ul> {{#each facts}} <li>Key: {{@key}} Value = {{this}}</li> {{/each}} </ul>

Il y a quelque chose d'officiel dans ce numéro ?

Comment utiliser réellement la liste anonyme d'objets avec des paires clé-valeur ?

Veuillez montrer un exemple réel en utilisant l'objet suggéré, var values = { 'single': 'Single bed', ...} et la sortie suggérée de la question.

PS : @prashantcs8 ton exemple est réel ? Ca ne fonctionne pas.

@chlab nous sommes en 2018... Il n'y a pas d'option dans Moustache pour utiliser des références anonymes ?

@baseten , à propos de votre "Mais ça doit être" ci - moche pour imposer des conversions de structure de données...

Ce n'est pas une solution élégante, mais j'utilise res.render('index', objs2list(obj)) où existe peut-être une méthode d'assistance Moustache pour effectuer la conversion,

function objs2list(p) {
  r = [];
  for (var key in p) if (p.hasOwnProperty(key)) {
    r.push({"@key":key,"@val":p[key]});
  }
  return r;
}

exister?

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

barbalex picture barbalex  ·  5Commentaires

funston picture funston  ·  7Commentaires

kuldeepdhaka picture kuldeepdhaka  ·  9Commentaires

mbrodala picture mbrodala  ·  16Commentaires

SmasherHell picture SmasherHell  ·  18Commentaires