1

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 への最後の呼び出しにヘルパー名がないことに注意してください。それは物事が落ちているところです。なぜそれが欠けているのかを理解するのに十分なほどハンドルバーを知りません。

ありがとう、スコット

4

1 に答える 1

1

ここで私自身の質問に答えます: どうやら Ember RC6 はハンドルバー 1.0.0 と互換性がありません。このスレッドを参照してください (RC5 を参照していることはわかっていますが、問題はまだ RC6 に存在します): http://discuss.emberjs.com/t/ember-rc-5-is-not-working-properly-with-handlebars-1 -0-0/1391

このコミットをチェリーピッキングして修正しました:https://github.com/emberjs/ember.js/commit/4023186ea157a8687ac611181e2ca49e5fc891d5

于 2013-06-26T13:01:06.937 に答える