Ember.js与Rails 3.1收到错误“无法找到模板”

时间:2012-01-29 08:12:30

标签: ruby-on-rails ruby-on-rails-3 ember.js handlebars.js

我正在尝试使用Rails 3.1设置Ember.js,我在Firebug控制台中收到以下错误:

uncaught exception: Error: <(subclass of App.ListOrdersView):ember201> - Unable to find template "app/templates/orders/list".

我跟着this guide。这是我的清单文件,它正确加载所有js:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require vendor/ember
//= require vendor/ember-rest
//= require_tree ./../lib
//= require app/app
//= require_tree ./../app/models
//= require_tree ./../app/controllers
//= require_tree ./../app/views
//= require_tree ./../app/helpers
//= require_tree ./../app/templates
//= require_self

这是车把模板app / templates / order / list.handlebars:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody>
  {{#each orders}}
    {{view App.ShowOrderView orderBinding="this"}}
  {{/each}}
  </tbody>
</table>

Rails查看文件app / views / orders / index.html.haml

%script{:type => "text/x-handlebars"}
  = hb 'view App.ListOrdersView'


:javascript
  $(function() {
    App.ordersController.loadAll(#{@orders.to_json.html_safe});
  }); 

最后是Gemfile中的Ember.js的宝石:

# Ember
gem 'ember-rails'
gem 'hamlbars', :git => "https://github.com/jamesotron/hamlbars.git"
gem 'rasputin'

3 个答案:

答案 0 :(得分:1)

检查路径,也许它们应该是

//= require_tree ./app/models
//= require_tree ./app/controllers
//= require_tree ./app/views
//= require_tree ./app/helpers
//= require_tree ./app/templates

无法找到模板app / templates / order * s * / list

这是车把模板app / templates / order / list.handlebars:

查看 s

中的路径差异

答案 1 :(得分:1)

您应该使用ember-railsrasputin,但同时使用这两种宝石可能会导致不可预测的行为。由于他们都试图注册和预编译你的把手模板,因此它们的目的是多余的,但它们的用法不同。

如果您查看rasputin的自述文件,您会看到模板在其路径中没有templates时注册。因此,如果您想使用此gem,则需要在app/orders/list中将模板声明为app/templates/orders/list而不是App.ListOrdersView

答案 2 :(得分:0)

我在更改模板定义和ember gems时遇到了类似的问题。虽然错误是相同的(抱怨模板路径 - 即使路径看起来都是正确的),但只需rake assets:clean即可完成整理。