使用Handlebars链接到嵌套路由

时间:2014-03-10 19:04:50

标签: ember.js handlebars.js

在基于Ember的项目中,我有一个book对象,其中包含一系列章节,每个章节都是一个部分数组。

我也有一个如下所示的嵌套路线:

  this.resource('book', { path: 'book/:id' }, function() {
        this.resource('section', { path: 'chapter/:chapter_num/section/:section_num'});
  });

在我的车把模板中,我的菜单看起来像这样:

   <ul>
        <li>{{#link-to 'book' this}}Home{{/link-to}}</li>
        {{#each chapter in chapters}}
            <li>{{title}}</li>
            <ul>
                {{#each section in sections}}
                    <#link-to ???WHAT TO PUT HERE???>{{section}}</link-to>
                {{/each}}
            </ul>
        {{else}}
            <li>No chapters</li>
        {{/each}}
    </ul>

我正在努力想出一个正确的方法来生成到给定部分的路由,其中​​输出将产生以下效果:

e.g:

book / 1234567 / chapter / 3 / section / 4 for chapter 3,section 4

第1章第2节

book / 1234567 / chapter / 1 / section / 2

一,我不知道如何访问当前章节的索引和我要创建链接的部分,以及两个,我不知道如何为给定部分创建嵌套路由。

我对Ember还很陌生,所以这里的任何提示都会非常有用。

2 个答案:

答案 0 :(得分:1)

我建议改变你的路线:

this.resource('book', { path: 'book/:id' }, function() {
        this.resource('chapter', { path: 'chapter/:chapter_num'}, function(){
             this.resource('section', { path: 'section/:section_num' });
        });
});

然后您可以通过执行以下操作添加路线:

{{#link-to 'book.chapter.section' book chapter section}} {{section}} {{/link-to}}

至少,我认为这应该有效。您可能需要将num更改为id

答案 1 :(得分:1)

您应该使用Ember.Route的序列化和模型方法来处理网址,并将该部分发送到链接。

使用 {{#link-to 'book.section' book section}}

并在路线中做这样的事情:

App.SectionRoute = Ember.Route.extend({
  model: function(params) {
      var book = this.modelFor('book');
      return book.getChapter(params.chapter_num).getSection(params.section_num);
  },

  serialize: function(section) {
      return { 
          chapter_num: section.get("chapter.id"),
          section_num: section.get("id")
      };
  }
});
希望有所帮助。