2013-03-01 5 views
6

私のEmberJSアプリケーションでは、すべてのハンドルバーテンプレートをプリコンパイルしているので、まっすぐなJavascriptファイルとしてロードされています。EmberJS - プリコンパイルされたハンドルバーテンプレートを登録します

問題は、プリコンパイルされたこれらのテンプレートが、私が思うようにEmberコンテナに入り込まないということです。ビューのテンプレートを指定すると、次のエラーが発生します。

Uncaught Error: assertion failed: You specified the templateName "application" for <MyApp.ApplicationView:ember164>, but it did not exist. 

ここに私のビューコードです。

window.MyApp.ApplicationView = Ember.View.extend({ 
    templateName: 'application' 
}); 

私は実行を踏んで、Emberコンテナにビューが存在しないことを確認しました。プリコンパイルされたテンプレートをコンテナに登録するために何か特別なことはありますか?もしそうなら、どうですか?

編集:私はハンドルバーのnpmパッケージでテンプレートをコンパイルしています。

+1

何テンプレートをプリコンパイルするのに使用していますか? – mavilein

+0

そして、アプリケーションを読み込む前にテンプレートを注入していますか?ここには、あらかじめロードするべき場所を示す[フィドル](http://jsfiddle.net/schawaska/Xsbhk/)があります。 – MilkyWayJoe

+1

私はちょうどnpmのハンドルバーパッケージを使用しています。私は使用する必要がある特別なemberがありますか? –

答えて

0

にテンプレートを探しますハンドルバーのコンパイラは実際に正しくコンパイルしますが、正しくロードするためにはEmberに登録する必要があります。次のいずれかを実行できます。

  • Ember.TEMPLATES ['sometemplate'] = COMPILED TEMPLATEを手動でロードします。これは機能しますが、痛みの何かになります。
  • npm ember-precompileのような特別なコンパイラを使用してコンパイルされたテンプレートが自動的にEmberテンプレートコンテナに登録されるようにコンパイルします。
3

テンプレートが

(キーとしてテンプレート名を持つだけのハッシュである)Ember.TEMPLATESに調べているあなたの例ApplicationViewが実行されたときだから、NPMながらEmber.TEMPLATES['application']

+1

はい、私は知っています - 私はコンパイルされたテンプレートをそのコンテナにロードするために何をする必要があるのか​​尋ねています。彼らはそこに入っていない! –

+0

プリコンパイルプロセスの一環として、手動でそれらを配置する必要があります。 – chrixian

0

あなたはルビー/ガードベースのソリューションを好む場合は、ここに私の要旨をチェックアウト:https://gist.github.com/perlun/5286391

あなたGuardfileから、このようにそれを使用します。

guard 'ember_handlebars', 
    :input => 'app/handlebars_templates', 
    :output => 'app/handlebars_compiled', 
    :remove_prefix => 'app/handlebars_templates/' do 
    watch(%r{app/handlebars_templates/(.+\.handlebars)}) 
end 

`` `

関連する問題