在ember-rails中创建组件时的命名约定

时间:2014-09-29 01:00:06

标签: ember.js ember-rails

我正在创建我的第一个组件,但大多数教程都假设我没有使用ember-rails。

据我所知,一个组件需要扩展Ember.Components并拥有它自己的模板,两者都需要正确命名,然后它可以在把手内部使用并放置在任何模板中。

我哪里错了?

# app/assets/javascripts/components/table-of-contents.js.coffee
App.TableOfContentsComponent = Ember.Component.extend

# app/assets/javascripts/templates/components/table-of-contents.js.hbs
<h2>Look Ma! My component works!
<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

# app/assets/javascripts/templates/somepage.js.hbs
<h1>Here be Some Page with it's own Table of Contents</h2>
{{table-of-contents}}

在我在somepage模板中加入{{table-of-contents}}并尝试打开某个页面后,控制台给我这个荒谬的错误

Uncaught Error: Assertion Failed: You must pass a view to the #view helper, not function () {

[编辑1:在gem README中找到更多信息。 Daah。实际上并没有期望它有更多的信息。马上开始:https://github.com/emberjs/ember-rails]

1 个答案:

答案 0 :(得分:0)

按照设计,您的组件实际上不需要任何自定义JavaScript。我不确定ember-rails是如何编译你的个人源文件的,但你的组件的html源代码应该是这样的。

<script type="text/x-handlebars" id="index">
  <h1>Here be Some Page with it's own Table of Contents</h2>
  {{table-of-contents}}
</script>

<script type="text/x-handlebars" id="components/table-of-contents">
  <h2>Look Ma! My component works!
  <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
  </ul>
</script>

当ember遇到一个未知的把手助手时,它会检查你是否将它定义为&#34; components /&#34; - 如果是的话 - 使用它。