Javascript 将侦听器OnReady添加到extjs组合框

Javascript 将侦听器OnReady添加到extjs组合框,javascript,ajax,combobox,extjs4.1,onready,Javascript,Ajax,Combobox,Extjs4.1,Onready,在组合框准备就绪时,是否仍可以执行函数 在Ext.OnReady的末尾,我遇到了一些问题,因为有时候这个组合似乎还没有准备好,调用一个函数用ajax调用来填充它的值,这会导致很多问题 我正在寻找一个合适的方法来做这件事,而不是 setTimeout(function(){myDataFiller();},300); setTimeout(函数(){myDataFiller();},300) 试试这个: var combo = new Ext.form.field.ComboBox({ /

在组合框准备就绪时,是否仍可以执行函数

在Ext.OnReady的末尾,我遇到了一些问题,因为有时候这个组合似乎还没有准备好,调用一个函数用ajax调用来填充它的值,这会导致很多问题

我正在寻找一个合适的方法来做这件事,而不是

setTimeout(function(){myDataFiller();},300); setTimeout(函数(){myDataFiller();},300) 试试这个:

var combo = new Ext.form.field.ComboBox({
    /* config settings, blah blah blah */
    listeners: {
        afterrender: {
            single: true,
            fn: function(combobox){
                Ext.Ajax.request({
                    /* request settings */
                    success: function(data){
                        var value;
                        /* process your data response */
                        combobox.setValue(value);
                    }
                });
            }
        }
    }
});

或者,如果您已经从Ajax请求中获得了值,您可以直接在
afterrender
函数中设置该值。注意上面使用的
single:true
。这意味着该函数只执行一次,这样,如果有什么原因导致组合框重新渲染,您就不会错误地重置该值。

这似乎是基于cpu的渲染问题


我在Intel Core 2 Duo上做了一些测试,我可以重现错误。之后,我在i7 cpu上进行了尝试,一切正常。

尝试使用afterRender()监听器进行Combo尝试使用:监听器:{afterRender:function(t,o){getInfoProduct();}},但其行为相同:扫描您发布的combo代码片段?这听起来更像是您在ajax请求中遇到了一些时间问题?您提出的第一种方法是我在Jai comment之后所做的,但没有解决。