我的控制器refs
出现问题,返回的对象无效。通过无效,它返回给我一个对象,说它还没有被渲染,即使我正在使用它
在我的控制器中,我有一个ref定义如下。
refs : [ {
ref : 'selectDeltaView',
selector : '[itemId=selectDeltaView]'
}]
稍后在我的控制器中,我使用创建的访问器访问此视图
this.getSelectDeltaView()
奇怪的是,第一次出现这种视图时,在Ext.Window
内部,它运行得很好。但是,在第二次启动时,我返回的视图不会被渲染。
this.getSeletDeltaView().rendered === false
仔细阅读Sencha的文档,似乎这只是将我的选择器传递给Ext.ComponentQuery.query
函数。但是,如果我调用Ext.ComponentQuery.query('[itemId=selectDeltaView]')
,我会得到一个数组,其中的单个元素呈现为true。
我是不是错过了什么?为什么我的控制器引用返回了无效数据。
更新
一些原始帖子中没有提到的其他细节。我最初的假设是我的观点没有被破坏。但是,我在ondestory
和beforedestory
事件中有日志语句,可以确认在关闭窗口时,我的视图正在被破坏。
最令人困惑的是,如果refs只是使用Ext.ComponentQuery.query
,为什么Ext.ComponentQuery.query
在重新打开窗口并返回正确视图时只返回一个视图。我从下面的问题中了解到裁判会接受这种观点,但这种观点已经不复存在了。。或者不应该。。如果视图被破坏,我可以强制控制器清除其捕获吗?
控制器引用在第一次求值后缓存。
结果是:
- 您第一次打开视图
getSeletDeltaView()
找到该视图,并将对该视图的引用存储在引用查找高速缓存中- 你关闭了视图,但并没有完全破坏它
- 您第二次打开视图,但它是另一个实例
getSeletDeltaView()
找到第一个视图,该视图不再渲染,但仍然存在,因为它没有被销毁。您不能使用此引用,因为它指向错误的视图
解决方案:
当您隐藏视图时,请确保destroy()
。您也可以使用autoDestroy
作为属性。通常默认情况下,autoDestroy
为true。