ember - 需要模板来显示嵌套路由的记录

时间:2015-01-10 16:24:35

标签: ember.js

似乎我没有在我的路由器中正确设置我的模型钩子,因为我的数据在模板中呈现。但也许还有其他我不想要的东西

这是我的路由器

Router.map(function() {
  this.resource('movies', function() {
    this.route('show', { path: ':movie_id'}, function() {
      this.resource('rewrites', function() {
        this.route('show', { path: ':id'});
        this.route('new');
        this.route('edit');
      });
    });
    this.route('edit', { path: ':movie_id/edit'});
    this.route('new');
  });
});

在我的下面重写的索引模板中,templates / rewrites / index.hbs,我需要显示一个特定电影的所有重写

{{outlet}}

{{link-to 'Add a New Rewrite' 'rewrites.new'}}

<table class="table table-bordered">
  <thead>
    <tr>
      <th>Name</th>
      <th>Script</th>
      <th>Author</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    {{#each rewrite in movie}}
      <tr>
        <td>
          {{rewrite.name}}
        </td>
        <td>{{rewrite.script}}</td>
        <td>{{rewrite.author}}</td>
        <td>{{link-to 'Edit this Rewrite' 'rewrites.edit' this}}</td>
        <td><a href="#" {{action 'delete' rewrite}}>Delete</a></td>
      </tr>
    {{/each}}
  </tbody>
</table>

我的路线中的模型设置,routes / rewrites / index.js,是

model: function() {
    var movie = this.modelFor('movies.show');
    return this.store.findAll('rewrite', { movie:movie });
  },

我为该模型尝试了很多东西,也试过了

return this.store.findAll('rewrite');

找到并呈现模板的方式,但没有数据 在创建重写2之后,我尝试了

return this.store.find('rewrite', 2);

并且也不会呈现任何数据。

更新: 上面的路由器是正确的。上面的templates / rewrites / index.hbs应该是{{#each rewrite in model}} 模型钩子应该是

 model: function() {
    return this.modelFor('movies.show').get('rewrites');
  },

此外,这个应用程序的api是一个rails应用程序。在电影的rails序列化器中,我需要将has_many添加到sideload重写中,如下所示:

class MovieSerializer < ActiveModel::Serializer
  attributes :id, :title, :director, :releaseDate, :cast, :description, :imageUrl
  has_many :rewrites, embed: :ids, include: true
end

1 个答案:

答案 0 :(得分:0)

您的each不正确; movie是单个对象,而不是要迭代的数组。试试这个:

{{#each rewrite in movie.rewrites}}

至少,假设您的对象模型是电影hasMany重写的。如果你真的想独立地在路由中加载重写,你可以像这样迭代它们:

{{#each rewrite in model}}