如何更换灰烬中的当前把手模板

时间:2013-10-25 21:30:33

标签: ember.js

我正在研究一个简单的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以获取完整示例。

1 个答案:

答案 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/

以下是更新代码http://jsfiddle.net/marciojunior/y58vB/

的小提琴