Javascript Ext.getElementById在Ext.Controller初始化或onLaunch事件中不起作用
我从应用程序代码的特定部分调用了以下Javascript Ext.getElementById在Ext.Controller初始化或onLaunch事件中不起作用,javascript,extjs,extjs4,extjs-mvc,extjs4.1,Javascript,Extjs,Extjs4,Extjs Mvc,Extjs4.1,我从应用程序代码的特定部分调用了以下Ext.getElementById,在本上下文中调用时,该调用确实有效: init: function() { // template method called when app boots; before Viewport is created this.control({ 'launcherlist': { itemclick: function (dataView, record) {
Ext.getElementById
,在本上下文中调用时,该调用确实有效:
init: function() {
// template method called when app boots; before Viewport is created
this.control({
'launcherlist': {
itemclick: function (dataView, record) {
Ext.getElementById('element-id');
},
}
...
}
但是,在发生任何用户触发的事件之前,我需要在早期阶段调用getElementById
当直接在其中调用getElementById
时,它不起作用,因为应用程序启动时调用了init
;在创建视口之前
所以我决定重写控制器的事件,因为onLaunch
是一个类似于init
的模板方法,但在创建视口后调用:
onLaunch: function() {
Ext.getElementById('element-id');
},
然而,这也不起作用
TL/DR
在任何用户触发的操作发生之前,我可以将正在工作的
Ext.getElementById
调用放在何处?您可能需要解释您正在尝试执行的操作。getElementById是一个“私有”方法,您不应该真正调用它。如果要按id获取元素,请使用Ext.get。您可能需要解释您要执行的操作。getElementById是一个“私有”方法,您不应该真正调用它。如果要按id获取元素,请使用Ext.get。解决方案:
由于呈现我要查找的DOM元素的小部件扩展了Ext.view.view
,因此Ext.get
可以实际找到呈现元素的正确事件是viewready
事件
另外,应该在任何地方使用
Ext.get
而不是Ext.getElementById
,因为后者是一种私有方法。解决方案:
由于呈现我要查找的DOM元素的小部件扩展了Ext.view.view
,因此Ext.get
可以实际找到呈现元素的正确事件是viewready
事件
注意,应该在任何地方使用
Ext.get
而不是Ext.getElementById
,因为后者是一个私有方法。我必须简单地通过id检索元素,在我的情况下,它是一个idtd
关于launcher。以前,在用户启动操作后(从控制器
)调用此代码所在的小部件构造函数。现在,我需要在用户启动任何操作之前启动小部件。但是从控制器的onLaunch
事件调用Ext.get
(我接受了你的建议,这确实是一个更好的方法)时不起作用(返回null
)。如果我运行Ext.get('about-launcher')代码>加载后,在Chrome控制台中,该语句起作用。onLaunch可能太早了,您应该侦听组件的呈现事件。谢谢Evan。是否存在类似于onLaunch
的控制器事件,在渲染视口的所有子组件后调用该事件?Evan是对的;render
事件是您应该放置它的位置。我刚刚检查了我的代码,它可以工作(从render事件运行Ext.getElementById)。因此,要么你钩住了错误的渲染事件,要么你正在寻找的元素在视图加载时没有被渲染(可能发生在子菜单项等)。我必须简单地按id检索一个元素,在我的例子中,它是一个id为about launcher的td
。以前,在用户启动操作后(从控制器
)调用此代码所在的小部件构造函数。现在,我需要在用户启动任何操作之前启动小部件。但是从控制器的onLaunch
事件调用Ext.get
(我接受了你的建议,这确实是一个更好的方法)时不起作用(返回null
)。如果我运行Ext.get('about-launcher')代码>加载后,在Chrome控制台中,该语句起作用。onLaunch可能太早了,您应该侦听组件的呈现事件。谢谢Evan。是否存在类似于onLaunch
的控制器事件,在渲染视口的所有子组件后调用该事件?Evan是对的;render
事件是您应该放置它的位置。我刚刚检查了我的代码,它可以工作(从render事件运行Ext.getElementById)。因此,要么您钩住了错误的渲染事件,要么您正在查找的元素在加载视图时未被渲染(可能发生在子菜单项等)