【问题标题】:Ember.js with Rails 3.1 getting error "Unable to find template"带有 Rails 3.1 的 Ember.js 出现错误“无法找到模板”
【发布时间】:2012-01-29 08:12:30
【问题描述】:

我正在尝试使用 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});
  }); 

最后是 Ember.js 的 gem,在 Gemfile 中:

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

【问题讨论】:

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


    【解决方案1】:

    您可能应该使用ember-railsrasputin,但同时使用这两个 gem 可能会导致不可预知的行为。由于它们都尝试注册和预编译您的车把模板,因此它们在目的上是多余的,但它们的用法不同。

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

    【讨论】:

    • 太棒了!我已经删除了 rasputin 和 ember-rails 并添加了 emberjs-rails,将 app/templates/orders/list 更改为 app/orders/list,它可以工作。不知道为什么会这样。
    • 我猜 emberjs-rails 在注册路径时也会从路径中删除“模板”一词。您选择这个宝石而不是 ember-rails / rasputin 有什么特别的原因吗?只是好奇,我没试过。
    • 按照您的建议,我尝试单独使用 rasputin,但没有成功。我不知道,我可能错过了什么。 embers-rails 有效,所以我选择了 :)
    【解决方案2】:

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

    //= 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中的路径差异

    【讨论】:

    • 清单文件在app/assets/javascripts/admin,而Ember.js app文件夹在app/assets/javascripts
    【解决方案3】:

    我在更改模板定义和 ember gem 时遇到了类似的问题。虽然错误是一样的(抱怨模板路径 - 尽管路径看起来都正确),但只需要rake assets:clean 就可以解决问题。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多