2017-01-23 106 views
2

我有一個嵌套的路線(見下文)。如何在父路線中重新加載兒童路線的模型?

this.route('home', { 
    path: '/' 
}, function() { 
    this.route('foo', { 
     path: '/foo' 
    }); 
    this.route('bar', { 
     path: '/bar' 
    }); 
}); 

foo route模型返回一個集合(數組)。

裏面父路由home,我定義了一個名爲reloadModel功能。

我嘗試從控制器重新加載模型,但失敗(產生未定義的函數錯誤,controller.get(...).refresh is not a functioncontroller.get(...).reload is not a function)。

reloadModel() { 
     const controller = this.controllerFor('home/a'); 
     controller.get('model').reload(); 
    }, 

我想從父路由重新加載子路由的模型;然而,我現在知道我可以得到孩子的路線嗎?

我的問題

我怎樣才能refresh模型路線foobar從路線home

任何暗示理解。

+0

哪些功能是在你的錯誤'GET','controllerFor'或'重裝未定義'? – nem035

+0

我已更新該問題。這是因爲我從控制器只是一個普通物體檢索到的'model'? –

+1

肯定會導致問題,因爲只有Ember Data模型具有'reload'方法。 – nem035

回答

3

它通常不是從父路由刷新子路由的模型,因爲它可能沒有在第一時間裝個好主意。與之相反,刷新父級模型與子級無關,因爲加載子級路由需要通過設計首先加載將加載父級模型的父路由。

根據您的需要這樣的功能,似乎你把自己放在一個艱難的位置,也許應該想想爲什麼確實我的設計要求我做這件事,而不是如何我能做到這一點。

Neverthless,您可以使用的方法是在父路徑home內調用與您在子模型路由中調用的功能相同的功能。

例如,如果路線a有:

model() { 
    return this.store.findRecord('a'); 
} 

你會做類似的事情在home

reloadModel() { 
    this.store.findRecord('a', { reload: true }); // skip the cache and make the request 
} 
+0

謝謝,你的回答對我有意義。我想我需要改變我的設計。 –

+1

@李新陽很高興幫助伴侶。 Ember最主要的一點是對設計非常嚴格,並試圖通過使所有其他方法變得更加困難來推動我們採用正確的方法。因此,更多的時間比沒有困難的事情可能是我們的方法存在缺陷,而不是Ember缺乏能力。當然這不是100%真實的,但它是一般的行爲。 – nem035

+0

fetchRecord不在燼數據的事 – xoma