如何在存储中获取全局变量值作为extpas中没有控制器的extraparam传递

时间:2017-06-14 08:59:31

标签: javascript extjs

这是我的store.js 我已经将app.js中的appid定义为全局变量并在某些页面中赋值,但仍然显示全局变量undefined.please提供答案。

Ext.define('Application.store.online.ApplicationDev', {
            extend : 'Ext.data.Store',
            storeId : 'appliaction',
            autoLoad : false,
            pageSize : 18,
            fields : ['total'],
            proxy : {
                type : 'ajax',
                url : 'GetApplicationIDList',
                reader : {
                    type : 'json',
                    totalProperty : 'total'
                },
                extraParams : {
                    param : '{params:{appid:"'+Application.app.globals.appid+'"}}'

                }
            }

        });

1 个答案:

答案 0 :(得分:0)

如果您已在浏览器控制台中检查了appid确实已在应用程序中设置,但未在商店代理上设置,则唯一可能的原因是设置appid的代码在定义商店的代码之后执行。

商店定义很快就会在文件读取后立即执行。

您可以尝试在商店实例的构造函数中设置值是否有帮助。当基于定义创建商店实例时,实例构造函数将在稍后执行。

Ext.define('Application.store.online.ApplicationDev', {
    extend : 'Ext.data.Store',
    storeId : 'appliaction',
    constructor: function() {
        this.callParent([{
            autoLoad : false,
            pageSize : 18,
            fields : ['total'],
            proxy : {
                type : 'ajax',
                url : 'GetApplicationIDList',
                reader : {
                    type : 'json',
                    totalProperty : 'total'
                },
                extraParams : {
                    param : '{params:{appid:"'+Application.app.globals.appid+'"}}'

                }
            }
        }]);
    }
});

如果这还为时尚早,可以在beforeload事件中设置extraParams,该事件甚至更晚(直接在第一次调用服务器之前)执行。

Ext.define('Application.store.online.ApplicationDev', {
    extend : 'Ext.data.Store',
    storeId : 'appliaction',
    autoLoad : false,
    pageSize : 18,
    fields : ['total'],
    proxy : {
        type : 'ajax',
        url : 'GetApplicationIDList',
        reader : {
            type : 'json',
            totalProperty : 'total'
        }
    },
    listeners: {
        beforeload: function(store) {
            store.getProxy().setExtraParam("param",
                '{params:{appid:"'+Application.app.globals.appid+'"}}'
            );
        }
    }
});