Соглашения об именах при создании компонента в 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}}

Консоль выдает мне эту бессмысленную ошибку после того, как я включаю {{table-of-contents}} в шаблон какой-то страницы и пытаюсь открыть какую-то страницу

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

[Редактировать 1: Нашел больше информации в драгоценном README. Даах. На самом деле НЕ ожидал, что у него будет больше информации об этом. Прохождение сейчас: https://github.com/emberjs/ember-rails]


person Evolve    schedule 29.09.2014    source источник


Ответы (1)


Как и было задумано, ваш компонент на самом деле не требует никакого пользовательского 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 встречает неизвестный хелпер handlebars, он проверяет, определен ли он как шаблон в «components/», и — если да — использует его.

person Chris Bricker    schedule 02.10.2014