2016-02-05 51 views
0

訪問嵌套的路線參數我有一個功能類似於一個嵌套少版本的本身就是一個嵌套的路線:從父路由/模板

/code/class/MyFile.java 
/code/coverage/:coverageId/class/MyFile.java 

有點不言自明,但coverage路線裝飾的頁面與一些額外的突出顯示/細節不在「正常」版本中。

但是,我的code模板定義了一個側欄,其中包含一個導航樹以訪問其他代碼文件。在查看/coverage/頁面時,我希望側欄以不同方式顯示鏈接,確保在單擊時保持嵌套路線。

我的問題:

我似乎無法找到一種方法來訪問:coverageIdcode路線或模板來修改顯示的聯繫方式。我的代碼路徑:

export default Ember.Route.extend({ 
    model(params) { 
    console.log('Coverage ID: ' + params.coverageId); 
     ... 

打印undefined。這似乎是有道理的,因爲它是一個孩子參數,這是「超出範圍」?

我的不正確的解決方案:

我在class路線試過這樣:

export default Ember.Route.extend({ 
    model(params) { 
    var parentModel = this.modelFor('code'); 
    parentModel.coverageId = params.coverageId; 
    ... 

,在我code.hbs模板:

{{#if model.coverageId}} 
    {{#link-to 'code.coverage.class' model.coverageId fileName}}{{fileName}} 
    {{/link-to}} 
{{else}} 
    {{#link-to 'code.class' fileName}}{{fileName}}{{/link-to}} 
{{/if}} 

實際工作!在查看coverage路線時,鏈接正確生成。

但是:雖然我可以用鼠標右鍵點擊這些鏈接,在一個單獨的標籤頁中打開他們成功,如果我只是經常點擊它們,我收到一個錯誤:

Error: Assertion Failed: You must use Ember.set() to set the `coverageId` property (of [object Object]) to `425988` 

當然不過,我不能使用parentModel.set('coverageId', params.coverageId);,因爲它失敗:

TypeError: parentModel.set is not a function 

所以!我該如何(1)檢查父代(code)路由中的嵌套路由參數,或者(2)是否將子路由中的已知值(:coverageId)正確注入到父節點的

回答

1

您可以通過使用全球Ember.set來擺脫.set不是函數錯誤。

因此,而不是:

parentModel.coverageId = params.coverageId; 

嘗試:

Ember.set(parentModel, 'coverageId', params.coverageId); 
+0

謝謝 - 完美的作品。我*期待*類似的東西可用,但偶然發現了錯誤的文檔,這導致我相信沒有3-arg'set()'函數:http://emberjs.com/api/classes/ Ember.Object.html#method_set依然習慣於Ember文檔/類結構。 –