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

时间:2014-03-13 11:20:01

标签: ember.js handlebars.js ember-router ember-model

我有这个余烬申请:

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/

感谢您的帮助!

3 个答案:

答案 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路线解析的模型。