1

我正在开发一个 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>

为什么会这样?我该如何避免呢?

4

2 回答 2

2

app/templates/默认情况下从模板名称中删除。试试gigs/list

于 2013-03-20T16:22:36.570 回答
0

对我来说,它在剥离时起作用templates,例如app/gigs/list

于 2013-06-12T14:59:15.070 回答