2016-02-05 98 views
0

访问嵌套的路线参数我有一个功能类似于一个嵌套少版本的本身就是一个嵌套的路线:从父路由/模板

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

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

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

我的问题:

我似乎无法找到一种方法来访问:coverageIdcode路线或模板来修改显示的联系方式。我的代码路径:

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

打印undefined。这似乎是有道理的,因为它是一个孩子参数,这是“超出范围”?

我的不正确的解决方案:

我在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)是否将子路由中的已知值(:coverageId)正确注入到父节点的

回答

1

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

因此,而不是:

parentModel.coverageId = params.coverageId; 

尝试:

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

谢谢 - 完美的作品。我*期待*类似的东西可用,但偶然发现了错误的文档,这导致我相信没有3-arg'set()'函数:http://emberjs.com/api/classes/ Ember.Object.html#method_set依然习惯于Ember文档/类结构。 –