我正在开发一个 ember-rails 应用程序,该应用程序通过 rails 管道预编译 Handlebars 资产。一切都通过 更新到最新版本bundle update
。
当我们加载索引时,ember 数据不会呈现到列表中,尽管 (app/views/gigs/index.html.erb):
<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
. 为什么那个模板擅离职守?
作为参考,我根据浏览器控制台运行以下命令:
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 中包含对事件视图的 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>
为什么会这样?我该如何避免呢?