在extjs上加载初始配置数据

时间:2017-07-26 11:51:28

标签: extjs views launch

需要您的帮助以解决以下问题。我有一个Extjs应用程序,我需要从一开始就从数据库中获取一些数据,我的意思是,在所有内容加载之前(主要是视图)。这是因为我需要加载的这些数据将用于在特定视图中创建表单。 所以问题是:我应该在哪里放置获取数据的函数并将其存储在全局变量中?我试图将该函数放在app.js上的启动函数中,但行为很奇怪(有时在视图呈现之前加载数据,有时会在之后加载)。

请参见上面的代码:

获取数据的函数(放在App.js中并在启动函数内调用):

cargarItemsEvaluacion: function()
{
    AppGlobals.itemsCargarFormEvaluacion = [];
    Ext.Ajax.request(
    {      
        url : 'app/proxy.evaluacion.php',
        method: 'GET',
        params :{
            act: 'getEvalItemsForm'

        },

        success : function(response) 
        {
            var obj = Ext.decode(response.responseText);
            Ext.each(obj.results, function(item)
            {
                //console.log(item);
                var tempItem = {
                xtype: 'container',
                layout: 'anchor',
                flex: 1,
                items: [
                {
                    //xtype: 'fieldset',
                    title: item.nombre,
                    items: [
                        {
                            id: 'item_'+item.id,
                            xtype: 'textfield',
                            fieldLabel: item.descripcion,
                            name: 'item_'+item.id,
                            allowBlank: false,
                            blankText: 'Este campo es obligatorio',
                            maskRe: /^[0-9]{1}/,
                            maxLenght: 2,
                            validateOnChange: 'true',
                            emptyText: 'Nota (1 al 10)',
                            submitEmptyText: false,
                            validator: function(value)
                            {
                                if(value.length>2 || value>10)
                                {
                                    return 'Complete con nota del 1 al 10';
                                }
                                var stringPad=/^[1-9]{1}[0-9]{0,1}/; 
                                if (!stringPad.test(value))
                                {
                                    return 'Complete con nota del 1 al 10';
                                }
                                else
                                {
                                    return true;
                                }
                            }
                        }]   
                }]
                };
                AppGlobals.itemsCargarFormEvaluacion.push(tempItem);

            });//End Ext.each

            if(AppGlobals.itemsCargarFormEvaluacion.length>0)
            {
                var itemObservacion = {
                    xtype: 'container',
                    layout: 'anchor',
                    flex: 1,
                    items: [
                    {
                        title: 'Observaciones',
                        items: [
                            /*{
                                id: 'ascenso',
                                xtype: 'checkbox',
                                boxLabel: 'Recomienda ascenso',
                                name: 'ascenso'
                            },*/
                            {
                                id: 'observaciones',
                                xtype: 'textareafield',
                                grow: true,
                                fieldLabel: 'Agregue observaciones adicionales si lo cree necesario',
                                name: 'observaciones',
                                labelAlign: 'top'
                            }
                            ]   
                    }]
                    };
                AppGlobals.itemsCargarFormEvaluacion.push(itemObservacion);
            }
        console.log(AppGlobals.itemsCargarFormEvaluacion);    
        },
        failure: function(response)
        {
            var obj = Ext.decode(response.responseText);
            console.log("Entra al failure "+response.responseText);
            //Ext.example.msg("Error", "No se pudo comprobar si es posible cargar al evaluador. Error: "+obj.error);

        }
    });//End Ext.ajax
}

这是视图中的initComponent函数,我需要使用从前一个函数获得的数据生成表单:

initComponent: function(){

    var formEvaluacion = this.items[0];
    if(AppGlobals.itemsCargarFormEvaluacion.length==0)
    {
        console.log("Data still no loaded");
    }
    else
    {
        console.log("Data loaded!");    
    }
    console.log(AppGlobals.itemsCargarFormEvaluacion);
    Ext.apply(formEvaluacion,{items: AppGlobals.itemsCargarFormEvaluacion});

    this.callParent(arguments);
}  

如您所见,我检查数据是在视图渲染之前加载还是之后加载。有时它之前,有时之后......我不知道它取决于......

任何帮助将不胜感激。

莫罗

1 个答案:

答案 0 :(得分:0)

想想我找到了解决方案。我将cargarItemsEvaluacion函数放入app.js的init函数中。似乎到目前为止工作。

谢谢!