Railsパイプラインを介してHandlebarsアセットをプリコンパイルするember-railsアプリを作成しています。経由ですべてが最新バージョンに更新されますbundle update
。
インデックスをロードすると、(app/views/gigs/index.html.erb)にもかかわらず、ember データはリストにレンダリングされません。
<h1>Gigs</h1>
<script type="text/x-handlebars">
{{ view App.ListGigsView }}
</script>
<script type="text/javascript">
$(function() {
App.gigsController.loadAll(<%= @gigs.to_json.html_safe %>);
});
</script>
そこで、以下を含む ListGigsView を確認しました (app/assets/javascripts/app/views/gigs/list.js):
App.ListGigsView = Ember.View.extend({
templateName: 'app/templates/gigs/list',
gigsBinding: 'App.gigsController',
showNew: function() {
this.set('isNewVisible', true);
},
hideNew: function() {
this.set('isNewVisible', false);
},
refreshListing: function() {
App.gigsController.findAll()
}
});
templateName がうまく指しているようです (これは、new.js などでも同様です)。それにもかかわらず、ブラウザー コンソール (Google Chrome バージョン 25.0.1364.172) は、次を返し続けます。
Uncaught Error: assertion failed: You specified the templateName app/templates/gigs/list for <App.ListGigsView:ember194>, but it did not exist.
app/assets/javascripts/app/templates/gigs/list.handlebars にあるファイルは次のとおりです。
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{{#each gigs}}
{{view App.ShowGigView gigBinding="this"}}
{{/each}}
{{#if isNewVisible}}
<tr>
<td>*</td>
<td>
{{view App.NewGigView}}
</td>
</tr>
{{/if}}
</tbody>
</table>
<div class="commands">
<a href="#" {{action "showNew"}}>New Gig</a>
<a href="#" {{action "refreshListing"}}>Refresh Listing</a>
</div>
テンプレートがレンダリングされないのはなぜですか? コンソールで実行Ember.TEMPLATES
すると、他のすべてのビュー テンプレート リンクがそのまま返されます。
> Ember.TEMPLATES
=> Object {app/templates/gigs/edit: function, app/templates/gigs/event: function, app/templates/gigs/show: function, application: function}
しかし、のためのものではありませんlist
。なぜそのテンプレートは AWOL なのですか?
参考までに、ブラウザコンソールに従って次を実行しています。
Ember.VERSION: 1.0.0-rc.1 ember.js:339 Handlebars.VERSION: 1.0.0-rc.3 ember.js:339 jQuery.VERSION: 1.9.1
-編集: index.html.erb の Event ビューへの Handlebars 参照を含めると、そのテンプレートも消えることがわかりました。
<h1>Gigs</h1>
<script type="text/x-handlebars">
{{ view App.ListGigsView }}
</script>
<script type="text/x-handlebars">
{{ view App.EventView }}
</script>
<script type="text/javascript">
$(function() {
App.gigsController.loadAll(<%= @gigs.to_json.html_safe %>);
});
</script>
なぜこれが起こるのですか?どうすればそれを回避できますか?