Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ext.getElementById在Ext.Controller初始化或onLaunch事件中不起作用_Javascript_Extjs_Extjs4_Extjs Mvc_Extjs4.1 - Fatal编程技术网

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检索元素,在我的情况下,它是一个id
td
关于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)。因此,要么您钩住了错误的渲染事件,要么您正在查找的元素在加载视图时未被渲染(可能发生在子菜单项等)