从父路由/模板

时间:2016-02-05 17:52:33

标签: javascript ember.js routing

我有一个嵌套路由,其行为与其自身的嵌套版本类似:

/code/class/MyFile.java
/code/coverage/:coverageId/class/MyFile.java

有些不言自明,但是coverage路线用一些额外的突出显示/细节来装饰页面,这些突出显示/细节在“普通”版本中不存在。

但是,我的code模板定义了一个侧边栏,其中包含一个用于访问其他代码文件的导航树。在查看/coverage/页面时,我希望侧边栏以不同方式显示链接,确保在点击时保持嵌套路线。

我的问题:

我似乎找不到一种方法来访问:coverageId路由或模板中的code来修改链接的显示方式。我的代码路线:

export default Ember.Route.extend({
  model(params) {
    console.log('Coverage ID: ' + params.coverageId);
      ...

打印undefined。这似乎有意义,因为它是 child 参数,它是“超出范围”?

我的错误解决方案:

我在我的class路线中尝试了这个:

export default Ember.Route.extend({
  model(params) {
    var parentModel = this.modelFor('code');
    parentModel.coverageId = params.coverageId;
    ...

其中,在我的code.hbs模板中:

{{#if model.coverageId}}
  {{#link-to 'code.coverage.class' model.coverageId fileName}}{{fileName}}
  {{/link-to}}
{{else}}
  {{#link-to 'code.class' fileName}}{{fileName}}{{/link-to}}
{{/if}}

实际上有效!查看coverage路线时,链接生成正确。

但是:虽然我可以右键单击这些链接中的任何一个,但是如果我只是定期点击它们,我会收到错误:

Error: Assertion Failed: You must use Ember.set() to set the `coverageId` property (of [object Object]) to `425988`

但当然,我不能使用parentModel.set('coverageId', params.coverageId);,因为它失败了:

TypeError: parentModel.set is not a function

所以!我如何(1)检查父(code)路由中的嵌套路由参数,或(2)正确注入已知值({{1}从子路由进入父级?

1 个答案:

答案 0 :(得分:1)

通过使用全局Ember.set,您可以摆脱.set不是函数错误。

所以,而不是:

parentModel.coverageId = params.coverageId;

尝试:

Ember.set(parentModel, 'coverageId', params.coverageId);