我将首先发布我的路由器,因为我认为它更容易解释:
@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天挖掘和尝试不同的解决方案,没有运气... 在这里发现了几个类似的问题,但他们试图实现不同的目标。