我有这个余烬申请:
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' });
});
});
});
这允许我将{{outlet}}
嵌入"维度"填充"尺寸"的模板模板,并将{{outlet}}
嵌入"维度"填充"值"的模板模板也是。
除了"值"中的链接到助手之外,一切都很有效。模板,不接受更多参数,也不接受ember API文档中描述的其他模型。
在深层嵌套路由中处理链接的最佳方法是什么?
我有这个小提示来表明我的问题: http://jsfiddle.net/vsiguero/pQpE3/5/
感谢您的帮助!
答案 0 :(得分:18)
您可以访问父路线'来自子路径的参数如下:
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/
请注意,我更新了Ember。
以下是Route#paramsFor
的文档:http://emberjs.com/api/classes/Ember.Route.html#method_paramsFor
答案 1 :(得分:5)
我相信最新的ember 1.5+适用于link-to
帮助从孩子到父母的任何模型或文字值,因此您不必提供完整模型路径的模型,因为它们默认为当前的路线路径。
您还可以使用内存中的transition.resolvedModels通过传递给model()的transition参数访问父模型。路径路径中的每个动态路径段都是该对象的属性,因此请确保路由器DSL为每个段参数名称指定不同的名称(如您所做)。因此,在您的ValueRoute中,您可以执行以下操作:
model: function(params,transition) {
return transition.resolvedModels.dimension;
}
答案 2 :(得分:4)
paramsFor
方法,这使得这成为可能。有关详细信息,请参阅@nickiaconis' answer。
如果我理解正确,我认为你会遇到预期的行为。路线的参数对于该路线是唯一的。我不是100%确定为什么会这样,但动态细分值不会传递给子路线。你应该做的是直接访问模型。在value
路线中,您可以使用this.modelFor('dimension')
获取已为dimension
路线解析的模型。