将参数从一个方法传递给extjs中的另一个方法

时间:2018-02-13 12:47:13

标签: javascript extjs parameter-passing

这是我的观点部分

Ext.define(' A2a.view.act.Job',{     extend:' Ext.container.Container',

requires: [
    'A2a.store.Job',
    'A2a.store.SharedData',
],

border: false,
chart: null,




hrer: [],
layout: {type: 'vbox', pack: 'start', align: 'stretch'},



initComponent: function () {
    var me = this;


    Ext.Ajax.request({
        url: utils.createUrl('api', 'dashboard-read'),
        async: true,

        callback: function(opts, success, response) {
            try {

                if (success) {
                    var output = App.decodeHttpResp(response.responseText);
                    const data = output.data;


                    var myArr = [];
                    data.map((date) => 
                    myArr = Object.keys(date).filter(key => key != 'DATE'));
                    me.hrer =myArr;

                    console.log(me.hrer =myArr);

                    me.loadChart();
                    //me.loadww();

                } 
            } catch (ex) {
                //return ex;
            }
        }
    });



   this.loadww();
    this.loadData(me.hrer);

    me.callParent(arguments);


},
loadData : function () {
    console.log("Init Function");
},







loadww: function (hrer) {
    var me = this;
    //var self = this;
    console.log(me.hrer);
    me.jobStore = Ext.create('O2a.store.PendingReports');
    Ext.apply(me, {
        items: [
            {
                xtype: 'chart',
                itemId: 'charid',
                name: 'charid',
                store : new Ext.create('Ext.data.JsonStore', {
                        proxy: {
                            type: 'ajax',
                            url : utils.createUrl('api', 'dashboard-read'),
                            reader: {
                                type: 'json',
                                root: 'data'
                            }
                        },
                        autoLoad : true,
                        successProperty : 'success',

                        fields : [{name: 'DATE', type: 'auto'}].concat(

    O2a.store.SharedData.hrer.map(function(companyName) {
        console.log(companyName);
        return {
            name: companyName,
            type: 'int'
        };
    })
)
                    }),
                style: 'background: #fff',
                insetPadding: 40,
                animate: true,
                shadow: false,
                flex: 2,
                minHeight: 300,
                legend: {
                    position: 'top',
                    boxStrokeWidth: 0,
                    labelFont: '12px Helvetica'
                },

                axes: [{
                        type: 'Numeric',
                        position: 'left',
                        fields: ['1'],
                        grid: true,
                        minimum: 0,

                    }, {
                        type: 'Category',
                        position: 'bottom',
                        fields: ['DATE'],
                        grid: true,
                    }],

            }]
    });
},



loadChart: function (hrer) {

    var me = this;
    console.log(me.hrer);
var cha = this.down('#charid');
var iii = null;
    Ext.Ajax.request({
        url: utils.createUrl('api', 'dashboard-read'),
        async: true,

        callback: function(opts, success, response) {
            try {

                if (success) {
                    var output = App.decodeHttpResp(response.responseText);
                    const data = output.data;

                    me.hrer
                    let myArr = [];
                    data.map((date) => 
                    myArr = Object.keys(date).filter(key => key != 'DATE'));


cha.series.clear();
    for(var i=0;i<myArr.length;i++){

    cha.series.add({           
    type: 'line',
    axis: 'left',
    xField: 'DATE',
    border: false,
    flex: 1,
    title: myArr[i],
    yField: myArr[i],       
    markerConfig: {
        radius: 4
    },
    highlight: {
        fill: '#000',
        radius: 5,
        'stroke-width': 2,
        stroke: '#fff'
    },

    tips: {
        trackMouse: true,
        style: 'background: #FFF',
        height: 20,
        width: 120,

        renderer: function (storeItem, item) {
            var name = item.series.title[Ext.Array.indexOf(item.series.yField, item.yField)];
            this.setTitle(name + ': ' + storeItem.get(item.yField));
        }
    }


    });
}
            } else {
                    //return 'Unknown Reason';
                }
            } catch (ex) {
                //return ex;
            }
        }
    });

}

} );

我想在loadww方法中传递hrer。如果我在initcomponent函数的回调中调用loadww,我可以传递它。但是图表没有加载。如果我在ajax请求之后调用它,则图表正在加载,但无法将hrer传递到外部。
如何在loadww函数内传递hrer数组。提前致谢

1 个答案:

答案 0 :(得分:0)

从代码的样式看起来这是ExtJS 3.x 在Ext.Ajax.request中定义范围,使其保持在视图中。

您的代码不是最佳状态。

  • 摆脱尝试......抓住。
  • 尝试写成功:this.dashboardSuccess
  • 使用回调,将在两种情况下运行(成功,失败)

如果这是ExtJS 4+,您应该将代码拆分为MVC

如果这是ExtJS 6+,您应该将代码拆分为MVVM

  • 编写代码声明
  • 在VM中存储并使用load-Event
  • 不要使用initComponent
  • 使用数据绑定