【问题标题】:Accessing nested route parameter from parent route/template从父路由/模板访问嵌套路由参数
【发布时间】:2016-02-05 17:52:33
【问题描述】:

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

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

有点不言自明,但 coverage 路由使用“正常”版本中不存在的一些额外突出显示/细节来装饰页面。

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

我的问题:

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

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) 从子路由进入父节点?

【问题讨论】:

    标签: javascript ember.js routing


    【解决方案1】:

    您可以通过使用全局 Ember.set 来消除 .set 不是函数错误。

    所以,而不是:

    parentModel.coverageId = params.coverageId;
    

    试试:

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

    【讨论】:

    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 2022-07-24
    • 2016-08-21
    • 2019-01-13
    • 2022-01-11
    • 1970-01-01
    • 2022-11-06
    • 2017-06-28
    相关资源
    最近更新 更多