深度嵌套资源& Ember.js中深层嵌套的模板?

时间:2014-12-09 18:28:16

标签: templates ember.js coffeescript

我将首先发布我的路由器,因为我认为它更容易解释:

  @resource 'clients', path: 'clients', ->    
    @resource 'client', path: '/:client_id', ->
      @resource 'client.contact', path: ':client_id/contact', ->
        @route 'new', path: '/new'
      @route 'edit'

我所追求的是,​​能够为所选客户添加新联系人,而不会丢失/替换所选客户端模板!

换句话说,我希望client/contact/new.hbs嵌套在client/index.hbs内而不替换它:

`templates/client/index.hbs`
{{!-- Some code has been removed/shortened for clarity --}}

{{model.name}}  

{{model.phone}}

{{model.url}}  

<button class="btn btn-danger" {{action 'delete'}}>Delete</button>


<h3>Contacts</h3>
{{#link-to 'client.contact.new'}}contactsLink{{/link-to}}
{{!-- here where i want 'contacts.new' to show up without replacing this template--}}

{{outlet}}

使用当前路线(上图),我实现了这一点,但是,URL看起来非常难看(为了清晰起见,我缩短了客户端ID):

/clients/6654../6654../contact/new

客户端ID在URL中显示两次,如果我从嵌套的client.contact资源的路径@resource 'client.contact', path: ':client_id/contact', ->中删除了动态段,或者即使我没有使用点{{1}用于保留深层嵌套的命名空间.的符号,然后新的联系人模板将替换client.index模板,我不想要...

当然,我可以使用一个简单的div,使用布尔控制器变量来显示/隐藏div但是,我需要未来的嵌套资源结构(编辑和删除客户端联系人)

这是我的模板结构:

client.contact

那么,我该如何实现呢?我不明白为什么contact.new模板首先替换了client.index模板,它不应该是templates/ |-- client/ | | edit.hbs | | index.hbs | |-- contact/ | | new.hbs |-- clients/ | | new.hbs 吗?

任何帮助,提示或建议都非常感谢,我真的花了最近2天挖掘和尝试不同的解决方案,没有运气... 在这里发现了几个类似的问题,但他们试图实现不同的目标。

0 个答案:

没有答案