Handlebars.js: NPMハンドルバーは、独自のプリコンパイル済みデータを読み取ることができません

作成日 2015年05月30日  ·  4コメント  ·  ソース: handlebars-lang/handlebars.js

ハンドルバーのドキュメントによると、$#$ 1 Handlebars.precompile() #$によって生成されたtemplateSpecは、 Handlebars.template()によって直接消費されるはずですが、エラースタックから、前者は文字列を出力し、後者は文字列を出力することがわかります。オブジェクトを期待します。

これは、問題を再現するための考案された例です。

var Handlebars = require('handlebars');

console.log(Handlebars.VERSION);

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

そして関連する出力

$ 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

最も参考になるコメント

それが私が恐れていたものです。 evalを使用する代わりに、関数コンストラクターを使用することを選択しましたが、すぐに呼び出して実際のオブジェクトを取得しました。 他の誰かがそれが役に立つと思うなら、それはどのように見えるかです。

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

ハンドルバーに簡単に統合できるもののようです。

全てのコメント4件

プリコンパイルは、JavaScriptソースを含む文字列を返します。 compileメソッドを使用するのと同じ環境で実行することを意図したものではありません。 何らかの理由でこれを行う必要がある場合は、テンプレートに渡す前にこのスティングを評価する必要があります。

それが私が恐れていたものです。 evalを使用する代わりに、関数コンストラクターを使用することを選択しましたが、すぐに呼び出して実際のオブジェクトを取得しました。 他の誰かがそれが役に立つと思うなら、それはどのように見えるかです。

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

ハンドルバーに簡単に統合できるもののようです。

怠惰なことなくHandlebars.compileを効果的に実装しています
コンパイル。 使用する予定のテンプレートにプリコンパイルを使用しているのはなぜですか
同じインスタンス?
2015年5月31日午後4時42分ネイサンウィット[email protected]
書きました:

それが私が恐れていたものです。 私はevalを使用する代わりに、
すぐに呼び出して実際の関数コンストラクターを取得する関数コンストラクター
物体。 他の誰かがそれが役に立つと思うなら、それはどのように見えるかです。

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

ハンドルバーに簡単に統合できるもののようです。


このメールに直接返信するか、GitHubで表示してください
https://github.com/wycats/handlebars.js/issues/1033#issuecomment -107249447

スクリプトは、電子メールテンプレートの開発ツールです。 プリコンパイルされたソースは本番環境で使用するためにアップロードされますが、完全なローカルプレビューも生成します。 コンパイルを使用しないことを選択したのは、この方法で両方を共通のソースから取得できるためです。

このページは役に立ちましたか?
0 / 5 - 0 評価