2014-03-13 116 views
9

我有了這個燼應用:灰燼深度嵌套的路線不守父動態參數

Ember  : 1.3.2 
Ember Model : 0.0.11 
Handlebars : 1.3.0 
jQuery  : 1.9.1 

使用這種資源分佈圖:

App.Router.map(function() { 
    this.resource('dimensions', function() { 
    this.resource('dimension', { path: ':dimension_id'}, function() { 
     this.resource('value', { path: 'values/:value_id' }); 
    }); 
    }); 
}); 

這讓我嵌入{{}出口}填充「維度」模板的「維度」模板中,並將「{維度」}嵌入到「維度」模板中,並填充「值」模板。

除了「值」模板中的鏈接幫助程序以外,所有工作都非常好,它不接受更多參數,也不接受其他模型,如ember API文檔中所述。

這是處理深層嵌套路由中鏈接的最佳方式?

我有了這個小提琴顯示我的問題: http://jsfiddle.net/vsiguero/pQpE3/5/

感謝您的幫助!

回答

4

編輯:paramsFor方法被添加了一段時間後,我寫這個答案,這使得這成爲可能。有關更多詳細信息,請參閱@nickiaconis的答案。


如果我理解正確,我認爲你會遇到預期的行爲。路線的參數對於該路線是唯一的。我不是100%確定這是爲什麼,但動態細分值不會傳遞給子路線。你應該做的是直接訪問模型。在您的value路線中,您可以使用this.modelFor('dimension')獲取爲dimension路線解決的模型。

+1

是的,你說得對,我在這裏結束了使用此解決方案,我離開這裏,以防萬一是有用的人:http://jsfiddle.net/ vsiguero/pQpE3/8/ – vsiguero

+1

感謝您更新答案!非常有幫助 – averydev

5

我相信最新的ember 1.5+應用了從兒童到父母給予link-to助手的任何模型或文字值,因此您不必爲完整模型路徑提供模型,因爲它們將默認爲當前路徑路徑。

此外,您還可以通過從內存中使用transition.resolvedModels傳遞給model()的轉換參數訪問父模型。路由路徑中的每個動態路由段都將是該對象上的一個屬性,因此請確保您的路由器DSL爲每個段參數名稱指定了不同的名稱(就像您當前所做的那樣)。因此,在您ValueRoute,你可以這樣做:

model: function(params,transition) { 
    return transition.resolvedModels.dimension; 
} 
+0

原始問題'link-to'不工作,因爲Ember路徑使用不當:代替當前模型,加載子模型。但我需要這個答案來實現其他目標,並且在這裏找到它:) – snovity

+0

這應該使用公共'Route#modelFor' API而不是'transition'對象的私有API。 – nickiaconis

15

你可以從孩子的路由訪問父路徑參數,像這樣:

this.paramsFor(parent_route_name).param_name 

所以,你會做這樣的事情在你的/app/routes/dimensions/dimension/value.js文件:

export default Ember.Route.extend({ 
    model: function(params, transition) { 
    var dimension_id = this.paramsFor('dimension').dimension_id; 
    // do whatever you need with dimension_id and params.value_id 
    } 
}); 

這是你的jsfiddle的一個分支,修改和工作:http://jsfiddle.net/niaconis/kxejh9yr/
注意,我更新了灰燼。

這裏是Route#paramsFor的文檔:http://emberjs.com/api/classes/Ember.Route.html#method_paramsFor

+0

謝謝你100倍 - 這是非常有用的:) –

+0

這正是我需要的! – williamsbdev