2016-01-03 32 views
1

我有一個名爲'側邊欄'application.hbs的插座。這個插座在一些路徑中使用一個名爲'sidebar-info'的組件來渲染附加信息。在這些路線中,我使用renderTemplate在適當的網點呈現東西。例如:灰燼路線與renderTemplate和兩個渲染調用覆蓋原來的模型

renderTemplate: function(controller, model) { 
    this.render('components/sidebar-info', { 
     into: 'application', 
     outlet: 'sidebar', 
     model: Ember.Object.create({ 
      title: this.get('i18n').t('signup'), 
      detailsComponent: 'signup-help' 
     }) 
    }); 
    this.render('sign-up'); 
}, 

這是components/sidebar-info模板:

<div class="title"> 
    <h1>{{model.title}}</h1> 
</div> 
{{#if model.detailsComponent}} 
<div class="details"> 
    {{component model.detailsComponent}} 
</div> 
{{/if}} 

當路由模板(未組分之一)被呈現,由路線定義的模型是由發送到該模型覆蓋零件。如果原來的模式是這樣的:

original_model = { 
    field_1: 1, 
    field_2: 2 
} 

然後使用model.field_1在模板的上下文是不確定的,而model.title可用。

爲什麼模型被覆蓋?


我使用灰燼2.2.0

回答

1

看來這是正確的行爲。按照Route API,這是發送到渲染方法的控制器和模型選項的解釋:

控制器 [字符串|對象]

使用這個模板,用名字引用控制器或作爲控制器實例。默認爲路線的成對的控制器

模型 [對象]

的模型對象上設置options.controller。默認爲路線的模型 返回值掛鉤

這意味着,設置只有模型選項設置路由的配對控制器上的模型,因爲這是默認option.controller。這意味着我們需要創建一個僅用於接收模型的虛擬控制器。

我測試過了,它按預期工作。