我正在研究一个简单的Ember CRUD应用程序,并遇到了一个问题,即使用“编辑”模板交换“显示”模板。这是我的路线配置:
App.Router.map(function(){ //map URLs to templates
this.resource('contacts',{path: '/contacts'}, function(){
this.resource('contact', {path: '/contact/:contact_id'}, function(){
this.route('edit');
this.route('create');
this.route('delete');
});
});
});
以下模板显示我的模型。我希望链接到用编辑模板替换显示模板:
<script type="text/x-handlebars" data-template-name="contact">
<h3>{{ firstName }} {{ lastName }}</h3>
<h4>Contact Details</h4>
{{ email }}
<br/>
{{ phone }}
<br/>
{{#link-to "contact.edit" this}}edit{{/link-to}}
</script>
不幸的是,当用户点击#link-to "contacdt.edit"
时,视图会在{{outlet}}中呈现(我只添加{{outlet}}进行调试)。编辑模板似乎也没有正确绑定到当前模型。
请参阅此jsfiddle以获取完整示例。
答案 0 :(得分:4)
默认情况下,模板在父模板的主插座中呈现。由于您的路线层次结构,您的contact.edit
模板将contact
作为父模板。您需要在contacts
模板内部进行渲染。
您可以从renderTemplate
覆盖App.ContactEditRoute
方法,以获得所需的行为:
App.ContactEditRoute = Em.Route.extend({
model: function (params) {
return this.store.find(App.Contact, params.contact_id);
},
actions: {
save: function () {
var newContact = this.modelFor('contact.edit');
this.transitionTo('contact', newContact);
}
},
renderTemplate: function() {
this.render('contact.edit', { into: 'contacts' })
}
});
这是模板呈现的文档http://emberjs.com/guides/routing/rendering-a-template/
的小提琴