我有一个嵌套路由,其行为与其自身的嵌套版本类似:
/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}从子路由进入父级?
答案 0 :(得分:1)
通过使用全局Ember.set
,您可以摆脱.set
不是函数错误。
所以,而不是:
parentModel.coverageId = params.coverageId;
尝试:
Ember.set(parentModel, 'coverageId', params.coverageId);