Ember/Java アプリケーションを構築しており、Maven ビルド中に Rhino を使用して Handlebars テンプレートをプリコンパイルしています。今日までハンドルバーRC3とEmber RC3を使っていて、生活は良好でした。今日、Ember RC6 と Handlebars 1.0.0 への更新を試みたところ、Rhino プリコンパイラは次のようになりました。
js: "src/main/js/third-party/handlebars-1.0.0.js", line 2024: uncaught JavaScript runtime
exception: TypeError: Cannot call method "replace" of undefined
at src/main/js/third-party/handlebars-1.0.0.js:2024
at src/main/js/third-party/handlebars-1.0.0.js:2038
at src/main/js/third-party/handlebars-1.0.0.js:1747
at src/main/js/third-party/handlebars-1.0.0.js:1368
at src/main/js/third-party/handlebars-1.0.0.js:1860
at src/main/js/third-party/handlebars-1.0.0.js:1356
at src/main/js/third-party/handlebars-1.0.0.js:1860
at src/main/js/third-party/handlebars-1.0.0.js:1356
at src/main/js/rhino-handlebars-precompiler.js:75 (precompile)
at src/main/js/rhino-handlebars-precompiler.js:89 (init)
at src/main/js/rhino-handlebars-precompiler.js:93
at src/main/js/rhino-handlebars-precompiler.js:15
独自の Rhino コンパイラとhttps://github.com/locnguyen/ember-rhino-precompilerにあるコンパイラの両方を試しました。
アップデート
Handlebars を詳しく調べたところ、Handlebars-1.0.0 は Handlebars RC3 とはわずかに異なるオペコードを生成しているようです。特に、_triageMustache ヘルパーの呼び出しが欠落しています。このハンドルバー フラグメントの場合:
{{#if enableLinks}}<a href="/foo?userId={{unbound loginAsAdminId}}&userAsId={{unbound legacyUserId}}" id="logoutAsLink">Return to {{loginAsAdminName}}</a>{{/if}}
RC3 を使用すると、次のようになります。
in compile appendContent "<a href="/userportal/returnToAdmin?userId="
getContext 0
pushStringParam "loginAsAdminId" "ID"
pushProgram
pushProgram
emptyHash
invokeKnownHelper 1 "unbound"
appendEscaped
appendContent "&userAsId="
getContext 0
pushStringParam "legacyUserId" "ID"
pushProgram
pushProgram
emptyHash
invokeKnownHelper 1 "unbound"
appendEscaped
appendContent "" id="logoutAsLink">Return to "
getContext 0
pushStringParam "loginAsAdminName" "ID"
pushProgram
pushProgram
emptyHash
invokeKnownHelper 1 "_triageMustache"
appendEscaped
appendContent "</a>"
1.0.0 では、次のようになります。
in compile appendContent "<a href="/userportal/returnToAdmin?userId="
getContext 0
pushStringParam "loginAsAdminId" "ID"
pushProgram
pushProgram
emptyHash
invokeKnownHelper 1 "unbound"
appendEscaped
appendContent "&userAsId="
getContext 0
pushStringParam "legacyUserId" "ID"
pushProgram
pushProgram
emptyHash
invokeKnownHelper 1 "unbound"
appendEscaped
appendContent "" id="logoutAsLink">Return to "
getContext 0
pushStringParam "loginAsAdminName" "ID"
pushProgram
pushProgram
emptyHash
invokeHelper 1
appendEscaped
appendContent "</a>"
invokeHelper への最後の呼び出しにヘルパー名がないことに注意してください。それは物事が落ちているところです。なぜそれが欠けているのかを理解するのに十分なほどハンドルバーを知りません。
ありがとう、スコット