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,然后再加载存储
西亚兹