Extjs4 ExtJs:初始化全局变量

Extjs4 ExtJs:初始化全局变量,extjs4,Extjs4,我有一个全局变量,它需要在加载存储时初始化,并且需要在另一个存储中使用该值,如下所示 var cp = 0; Ext.onReady(function() { Ext.define('Init', { singleton: true, cp: 0 }); Ext.define('loggedUserList', { extend: 'Ext.data.Model', fields: [

我有一个全局变量,它需要在加载存储时初始化,并且需要在另一个存储中使用该值,如下所示

var cp = 0;

Ext.onReady(function() {
    Ext.define('Init', {
        singleton: true,
        cp: 0
    });

    Ext.define('loggedUserList', {
        extend: 'Ext.data.Model',
        fields: [
            'id',
            'name'
        ]
    });

    loggedUser = Ext.create('Ext.data.Store', {
        model: 'loggedUserList',
        autoLoad: true,
        proxy: {
        type: 'ajax',
        url: url+'/lochweb/loch/users/getLoggedUser',
        reader: {
            type: 'json',
            root: 'provider'
        },
        listeners: {
            load: function(loggedUser) {
                Init.cp = loggedUser.getAt(0).data.id;
            }
        }
    }); 
});
我在另一个url中使用cp的值,如下所示:
url:url+'/lochweb/loch/词汇表/getVocabularyByProvider?providerId='+Init.cp,

Ext.define('vocbList', {
    extend: 'Ext.data.Model',
    fields: [
        {
            name: 'id',
            mapping: 'id'
        },
        {
            name: 'code',
            mapping: 'code'
        }
    ]
});

var vocabulary = Ext.create('Ext.data.Store', {             
    model: 'vocbList',
    autoLoad: true,
    proxy: {
        type: 'ajax',                   
        url: url+'/lochweb/loch/vocabulary/getVocabularyByProvider?providerId='+Init.cp,                    
        reader: {
            type: 'json',
            root: 'Vocabulary'
        }
    }
});
但它的值仍然是0。我尝试使用(cp,Init.cp)。如何从存储中分配其值,以便可以重用


感谢您在这里声明
loggedUser=Ext.create('Ext.data.Store'{
型号:“loggedUserList”,
自动加载:true,…}
with Init.cp在load()中被分配了一些数据。但是您无法确认Init.cp在声明变量
词汇表时是否实际有值(即,可能loggedUser尚未完全加载)。因此,它在url中仍然为0

要确认,您应该将
vocbList
词汇表的代码移动到函数中:

function vocabularyLoad() {
   Ext.define('vocbList', {...});
   var vocabulary = ...
}
并在
loggedUser
中以这种方式使用该功能:

loggedUser = Ext.create('Ext.data.Store', {
    ...
    listeners: {
         load:function(loggedUser){
              Init.cp = loggedUser.getAt(0).data.id;
              vocabularyLoad();
         }
    }
 });

但是实际上,这种重构使得
Init.cp
的赋值变得多余,因为您可以直接将
loggedUser.getAt(0.data.id
的值传递到定义的函数中。

这里您声明
loggedUser=Ext.create('Ext.data.Store'){
型号:“loggedUserList”,
自动加载:true,…}
with Init.cp在load()中被分配了一些数据。但是您无法确认Init.cp在声明变量
词汇表时是否实际有值(即,可能loggedUser尚未完全加载)。因此,它在url中仍然为0

要确认,您应该将
vocbList
词汇表的代码移动到函数中:

function vocabularyLoad() {
   Ext.define('vocbList', {...});
   var vocabulary = ...
}
并在
loggedUser
中以这种方式使用该功能:

loggedUser = Ext.create('Ext.data.Store', {
    ...
    listeners: {
         load:function(loggedUser){
              Init.cp = loggedUser.getAt(0).data.id;
              vocabularyLoad();
         }
    }
 });

但实际上,这种重构使得
Init.cp
的赋值变得多余,因为您可以直接将
loggedUser.getAt(0).data.id
的值传递到定义的函数中。

存储异步加载数据,因此您无法确定在加载另一个存储之前,Init.cp是否将用新值初始化。 试试这个:

var cp=0;

Ext.onReady(function(){
Ext.define('Init', {
    singleton: true,
    cp: 0
});

Ext.define('vocbList', {
            extend: 'Ext.data.Model',
            fields: [
                { name: 'id', mapping: 'id' },
                { name: 'code', mapping: 'code' }

            ]
        });



    var vocabulary = Ext.create('Ext.data.Store', {             
        model: 'vocbList',
        proxy: {
            type: 'ajax',                                   
            reader:  {
                type: 'json',
                root: 'Vocabulary'
            }
        }

Ext.define('loggedUserList', {
                extend: 'Ext.data.Model',
                fields: ['id','name']
            });

            loggedUser = Ext.create('Ext.data.Store', {
                model: 'loggedUserList',
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    url : url+'/lochweb/loch/users/getLoggedUser',
                    reader: {
                     type: 'json',
                        root: 'provider'
                    }                   
                },
                listeners: {
                    load:function(loggedUser){
                        Init.cp = loggedUser.getAt(0).data.id;
                        vocabulary.getProxy().url = url+'/lochweb/loch/vocabulary/getVocabularyByProvider?providerId='+Init.cp;
                        vocabulary.load();
                    }
                }

            }); 
});
如您所见,您必须在第一个存储刚刚加载时动态设置词汇表代理的url,然后再加载存储


Cyaz

存储异步加载数据,因此无法确保在加载另一个存储之前,Init.cp将使用新值初始化。 试试这个:

var cp=0;

Ext.onReady(function(){
Ext.define('Init', {
    singleton: true,
    cp: 0
});

Ext.define('vocbList', {
            extend: 'Ext.data.Model',
            fields: [
                { name: 'id', mapping: 'id' },
                { name: 'code', mapping: 'code' }

            ]
        });



    var vocabulary = Ext.create('Ext.data.Store', {             
        model: 'vocbList',
        proxy: {
            type: 'ajax',                                   
            reader:  {
                type: 'json',
                root: 'Vocabulary'
            }
        }

Ext.define('loggedUserList', {
                extend: 'Ext.data.Model',
                fields: ['id','name']
            });

            loggedUser = Ext.create('Ext.data.Store', {
                model: 'loggedUserList',
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    url : url+'/lochweb/loch/users/getLoggedUser',
                    reader: {
                     type: 'json',
                        root: 'provider'
                    }                   
                },
                listeners: {
                    load:function(loggedUser){
                        Init.cp = loggedUser.getAt(0).data.id;
                        vocabulary.getProxy().url = url+'/lochweb/loch/vocabulary/getVocabularyByProvider?providerId='+Init.cp;
                        vocabulary.load();
                    }
                }

            }); 
});
如您所见,您必须在第一个存储刚刚加载时动态设置词汇表代理的url,然后再加载存储

西亚兹