web-dev-qa-db-fra.com

Handlebars.js analyse un objet au lieu de [Objet objet]

J'utilise des modèles de guidon et les données JSON sont déjà représentées dans [Objet objet], comment puis-je analyser ces données en dehors du guidon? Par exemple, j'essaie de renseigner une variable JavaScript sur la page à l'aide d'une balise de guidon, mais cela ne fonctionne pas.

Aucune suggestion? Merci!

MODIFIER:

Pour clarifier, j'utilise ExpressJS w/Handlebars pour la création de modèles. Dans mon parcours, j'ai ceci:

var user = {}
user = {'id' : 123, 'name' : 'First Name'}

res.render('index', {user : user});

Ensuite, dans mon modèle index.hbs, j'ai maintenant un objet {{user}}. Je peux utiliser {{#each}} Pour parcourir l'objet correctement. Cependant, j'utilise également Backbonejs et je souhaite transmettre ces données à une vue, telle que celle-ci:

myView = new myView({user : {{user}});

Le problème, c'est que {{user}} Affiche simplement [Object object] Dans le source si je le mets dans console.log, j'obtiens une erreur, "Identifiant inattendu".

65
dzm

Lors de la sortie de {{user}}, Handlebars va d'abord récupérer la valeur user's .toString(). Pour Plain Objects, le le résultat par défaut est le "[object Object]" que vous voyez.

Pour obtenir quelque chose de plus utile, vous pouvez soit afficher une propriété spécifique de l'objet:

{{user.id}}
{{user.name}}

Ou, vous pouvez utiliser/définir un assistant pour formater l'objet différemment:

Handlebars.registerHelper('json', function(context) {
    return JSON.stringify(context);
});
myView = new myView({
    user : {{{json user}}} // note triple brackets to disable HTML encoding
});
141
Jonathan Lonowski

Vous pouvez simplement stringify le JSON:

var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);

Puis dans un modèle imprimé par:

{{{user.stringify}}};
11
nguyên

J'utilise des modèles côté serveur dans node-js, mais cela peut également s'appliquer au côté client. J'enregistre l'aide de json de Jonathan dans le noeud. Dans mon gestionnaire, j'ajoute un contexte (tel que addressBook) via res.locals. Ensuite, je peux stocker la variable de contexte côté client comme suit:

<script>
  {{#if addressBook}}
  console.log("addressBook:", {{{json addressBook}}});
  window.addressBook = {{{json addressBook}}};
  {{/if}}
</script>

Notez les curlies triples (comme souligné par Jim Liu ).

4
Jeff Lowery

Vous essayez de transmettre la syntaxe de modèle {{ }} Dans un objet JSON non valide.

Vous devrez peut-être faire ceci à la place:

myView = new myView({ user : user });

1
Terry