2017-04-24 46 views
1

,模型實例沒有通過鏈接發送到動態路由如果動態路由是模型哈希,我似乎無法將模型實例傳遞給動態路由。如果使用RSVP.hash()

我有一個公司的路線:

// routes/companies,js 
export default Ember.Route.extend({ 
    model() { 
    return this.get('store').findAll('company'); 
    } 
}); 

而一個企業/編輯路線:

// routes/companies/edit.js 
export default Ember.Route.extend({ 
    model(params) { 
    var store = this.store; 
    return Ember.RSVP.hash({ 
     companies: store.findRecord('company', params.company_id), 
     companyTypes: store.findAll('companyType') 
    }); 
    } 
}); 

我的公司模板:

<!-- templates/companies.hbs --> 
<div style="width:400px; height: 300px; overflow:true;float:left;"> 
    <h2>Companies</h2> 

    {{#each model as |company|}} 
    <p> 
     {{#link-to "companies.show" company}}{{company.companyName}}{{/link-to}} 
     {{#link-to 'companies.edit' company}}Edit{{/link-to}} 
    </p> 
    {{/each}} 
    {{#link-to 'companies.new'}}New{{/link-to}} 
</div> 
{{outlet}} 

如果我直接去動態路線,一切正常。

然而,在companies.hbslink-to我傳遞公司模式向companies.edit路線,但數據永遠不會給companies.editcompanyundefined)我假設,因爲companies.edit期待模型哈希值。

回答

1

使用堆棧溢出進行橡皮鴨再次工作。

更改link-to傳遞ID,而不是型號:

{{#link-to 'companies.edit' company.id}}Edit{{/link-to}} 

當您通過ID,你的事業,如果你只是傳遞模型重新火與模型鉤被忽略模型掛鉤。我不完全確定爲什麼在這種情況下,似乎有必要提供id並強制模型掛鉤重新填充散列。

也許Ember無法推斷散列中的哪個模型正在使用或其他副作用?

+2

當鏈接被點擊後,特定的路由過渡將開始,路由模型鉤子將被調用以獲得'模型數據',在你的情況下你提供'模型'本身'鏈接到',所以燼將假設所需模型已經解決,因此不需要再次調用模型鉤子。在這裏,你去爲燼指南解釋https://guides.emberjs.com/v2.12.0/routing/specifying-a-routes-model/#toc_dynamic-models – kumkanillam

+0

@kumkanillam,那麼爲什麼'{{#鏈接到「 companies.show「company}}'work but not'{{#link-to」companies.edit「company}}'? '.show'路由獲取緩存模型,但'.edit'不是? –

+0

1.沒有動態段的路線將始終執行模型掛鉤。 2.具有動態段的路由只有在通過URL輸入時纔會執行模型掛鉤。 3.具有動態段的路由,如果您使用鏈接到幫助器進行轉換,那麼您只需提供標識符,然後模型掛接即可執行。 4.具有動態段的路由,如果您使用鏈接到幫助程序進行轉換,並且如果您提供模型/或任何對象,則不會執行模型掛接。 – kumkanillam