gpt4 book ai didi

ember.js - ContainerViews 有何特点? (断言失败 : calling set on destroyed object)

转载 作者:行者123 更新时间:2023-12-02 09:11:56 25 4
gpt4 key购买 nike

全部,

我已经四处寻找答案,但尚未找到好的解释和解决方案。希望对您有所帮助。

我有一个渲染 Ember.ContainerView 的路由(而不是标准的 Ember.View)。当我离开该路线然后返回该路线时(通过后退按钮、链接帮助程序或仅更改网址),我在控制台中收到以下错误:

Uncaught Error: Assertion Failed: calling set on destroyed object

据我所知,造成这种情况的一个高级原因是,当我们从 ContainerView 的路由转移时,它的 childViews 被标记为已销毁。当我们转换回路线时,问题与 Ember 尝试将 childViews 设置回已销毁的实例有关。

我不太清楚,但这是我目前的模糊理解。

所以,我的问题如下:

  1. 如果我对这个问题的理解不正确,您能纠正一下吗?
  2. 您能告诉我如何修复此错误吗?

为了您的方便,我创建了一个 JSBin example为了您的观看乐趣。要复制该错误,请打开 JS 控制台,单击转到路线二链接,然后单击转到索引链接。现在检查您的日志。

预先感谢您提供的任何帮助。

最佳答案

这是修复:http://jsbin.com/jumoy/1/edit?html,css,js,output

我以前也遇到过这个问题。我不能说我真正非常详细地理解它,但这是普遍的问题。当您定义容器 View 时,实际上是在定义 subview 时创建 subview ,而不是在创建 View 实例时创建。这意味着您的 subview “初始”仅被创建一次,即在初始化解析文件并定义 ContainerView 时。当 ember 清理这个 subview 时,它不会永远消失,“初始”将始终等于清理后的 View 。

通过将“initial”设置为属性,每次呈现容器 View 的新实例时都会创建它,因此将创建并访问新的 subview 。

所以这个故事的寓意是,尽量不要在 Controller / View 的定义中创建对象。相反,创建返回该对象的创建的属性。

希望这有帮助并且有意义。

更新::

我编辑了 jsbin,以便更深入地向您展示正在发生的情况以及它不起作用的原因。要查看取消注释第二个 ContainerView 并注释掉第一个 ContainerView 的效果,您会在控制台日志中注意到,第二次转到 TwoRoute 时,它​​已将该初始属性标记为状态: View 正在销毁。

http://jsbin.com/jumoy/2/edit?html,js,output

关于ember.js - ContainerViews 有何特点? (断言失败 : calling set on destroyed object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23811664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com