Handlebars.js: Le guidon NPM ne peut pas lire ses propres données précompilées

Créé le 30 mai 2015  ·  4Commentaires  ·  Source: handlebars-lang/handlebars.js

Selon la documentation de Handlebars , le templateSpec généré par Handlebars.precompile() devrait être directement consommable par Handlebars.template() , mais il ressort clairement de la pile d'erreurs que le premier produit une chaîne et le second attend un objet.

Voici un exemple artificiel qui recrée le problème.

var Handlebars = require('handlebars');

console.log(Handlebars.VERSION);

var pre = Handlebars.precompile('{{foo}}');
var template = Handlebars.template(pre);

Et la sortie associée

$ node contrived.js 
3.0.1

/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars/runtime.js:48
    throw new _Exception2['default']('Unknown template object: ' + typeof temp
          ^
Error: Unknown template object: string
    at Object.template (/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars/runtime.js:48:11)
    at HandlebarsEnvironment.hb.template (/private/tmp/hbs-bug/node_modules/handlebars/dist/cjs/handlebars.runtime.js:46:20)
    at Object.<anonymous> (/private/tmp/hbs-bug/contrived.js:7:27)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

Commentaire le plus utile

C'est ce que j'avais peur. Au lieu d'utiliser eval, j'ai choisi d'utiliser un constructeur de fonction que j'ai ensuite immédiatement appelé pour me donner l'objet réel. Voici à quoi cela ressemble si quelqu'un d'autre le trouve utile.

var preStr = Handlebars.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var template = Handlebars.template(pre);

Cela ressemble à quelque chose qui pourrait être facilement intégré dans les guidons.

Tous les 4 commentaires

La précompilation renvoie une chaîne avec la source JavaScript. Il n'est pas destiné à être exécuté dans le même environnement que vous utiliseriez simplement la méthode de compilation. Si vous avez besoin de le faire pour une raison quelconque, vous devez évaluer cette piqûre avant de passer au modèle.

C'est ce que j'avais peur. Au lieu d'utiliser eval, j'ai choisi d'utiliser un constructeur de fonction que j'ai ensuite immédiatement appelé pour me donner l'objet réel. Voici à quoi cela ressemble si quelqu'un d'autre le trouve utile.

var preStr = Handlebars.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var template = Handlebars.template(pre);

Cela ressemble à quelque chose qui pourrait être facilement intégré dans les guidons.

Vous implémentez efficacement Handlebars.compile sans paresseux
compilation. Pourquoi utilisez-vous la précompilation pour les modèles que vous prévoyez d'utiliser dans
le même cas ?
Le dimanche 31 mai 2015 à 16h42 Nathan Witt [email protected]
a écrit:

C'est ce que j'avais peur. Au lieu d'utiliser eval bien que j'ai choisi d'utiliser un
constructeur de fonction que j'ai ensuite immédiatement invoqué pour me donner le véritable
objet. Voici à quoi cela ressemble si quelqu'un d'autre le trouve utile.

var preStr = Guidon.precompile('{{foo}}');
var pre = (new Function('return ' + preStr)());
var template = Guidon.template(pre);

Cela ressemble à quelque chose qui pourrait être facilement intégré dans les guidons.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/wycats/handlebars.js/issues/1033#issuecomment -107249447
.

Le script est un outil de développement pour les modèles d'e-mails. La source précompilée est téléchargée pour être utilisée en production, mais je génère également un aperçu local complet. J'ai choisi de ne pas utiliser compile car de cette façon je peux obtenir les deux à partir d'une source commune.

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