10

我有这个 ember 应用程序:

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/

谢谢你的帮助!

4

3 回答 3

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#paramsForhttp ://emberjs.com/api/classes/Ember.Route.html#method_paramsFor

于 2015-01-10T01:06:39.557 回答
6

我相信最新的 ember 1.5+ 将任何模型或文字值应用给link-to从子到父的助手,因此您不必为完整模型路径提供模型,因为它们将默认为当前路径路径。

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

model: function(params,transition) {
    return transition.resolvedModels.dimension;
}
于 2014-05-18T03:37:40.240 回答
4

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


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

于 2014-03-13T14:10:04.447 回答