我遇到控制器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]')
,我会得到一个数组,其中包含一个呈现为真的单个元素。
我错过了什么吗?为什么我的控制器引用了返回无效数据。
更新
原帖中未提及的其他一些细节。我最初的假设是我的观点没有被破坏。但是,我在ondestory
和beforedestory
事件中有日志语句,并且可以确认在关闭窗口时我的视图正在被销毁。
最令人困惑的是,如果refs只使用Ext.ComponentQuery.query
,为什么Ext.ComponentQuery.query
仅在重新打开窗口时返回一个视图并返回正确的视图。我从下面的问题中了解到refs将捕获视图,但该视图不再存在..或者不应该......如果视图被破坏,我可以强制控制器清除它的捕获吗?
答案 0 :(得分:1)
在第一次评估后缓存控制器参考。
这是怎么回事:
getSeletDeltaView()
找到该视图,并在引用查找缓存中存储对它的引用。getSeletDeltaView()
找到第一个视图,该视图不再呈现,但仍然存在,因为它没有被销毁。您不能使用此引用,因为它指向错误的视图。解决方案:
隐藏它时,请确保destroy()
您的视图。您还可以使用autoDestroy
作为财产。通常,autoDestroy
默认为true。