Ember深层嵌套的路由不保留父动态参数

vsi*_*ero 10 handlebars.js ember.js ember-router ember-model

我有这个ember应用程序:

Ember       : 1.3.2
Ember Model : 0.0.11
Handlebars  : 1.3.0
jQuery      : 1.9.1 
Run Code Online (Sandbox Code Playgroud)

使用此资源图:

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

这允许我嵌入{{outlet}}填充"维度"模板的"维度"模板,并嵌入{{outlet}}填充"值"模板的"维度"模板中.

除了"值"模板中的链接到帮助程序之外,所有工作都很顺利,它不接受更多参数,也不接受其他模型,如ember API文档中所述.

哪个是在深层嵌套路由中处理链接的最佳方法?

我有这个小提示来表明我的问题:http: //jsfiddle.net/vsiguero/pQpE3/5/

谢谢你的帮助!

nic*_*nis 18

您可以从子路径访问父路由的参数,如下所示:

this.paramsFor(parent_route_name).param_name
Run Code Online (Sandbox Code Playgroud)

所以你在你的/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
  }
});
Run Code Online (Sandbox Code Playgroud)

这是你的jsFiddle的一个分支,修改和工作:http://jsfiddle.net/niaconis/kxejh9yr/
注意我更新了Ember.

下面是文档Route#paramsFor:http://emberjs.com/api/classes/Ember.Route.html#method_paramsFor


And*_*ing 6

我相信最新的ember 1.5+适用于link-to从子节点到父节点的帮助程序的任何模型或文字值,因此您不必为完整模型路径提供模型,因为它们将默认为当前路径路径.

您还可以通过使用内存中的transition.resolvedModels传递到model()的transition参数访问父模型.路径路径中的每个动态路径段都是该对象的属性,因此请确保路​​由器DSL为每个段参数名称指定不同的名称(如您所做).因此,在您的ValueRoute中,您可以执行以下操作:

model: function(params,transition) {
    return transition.resolvedModels.dimension;
}
Run Code Online (Sandbox Code Playgroud)


GJK*_*GJK 4

编辑:该paramsFor方法是在我写完这个答案后一段时间添加的,这使得这成为可能。有关更多详细信息,请参阅@nickiaconis 的回答。


如果我理解正确,我认为您正在遇到预期的行为。路由的参数对于该路由是唯一的。我不是 100% 确定为什么会这样,但动态段值不会传递给子路由。您应该做的是直接访问模型。在您的value路线中,您可以使用this.modelFor('dimension')来获取为该dimension路线解析的模型。