我有一个全局变量,需要在加载商店时进行初始化,并且需要在另一个商店中使用该值,如下所示
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;
}
}
});
});
我在另一个网址中使用cp的值如下:url: url + '/lochweb/loch/vocabulary/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)。如何分配其值表单存储以便可以重用它?
由于
答案 0 :(得分:4)
以异步方式存储加载数据,因此在加载其他存储之前,无法确定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
答案 1 :(得分:0)
在此声明loggedUser = Ext.create('Ext.data.Store', {
model: 'loggedUserList',
autoLoad: true,...}
,其中Init.cp在load()中分配了一些数据。但是,在声明变量vocabulary
时,无法确认Init.cp实际上是否具有值(即,可能还没有完全加载了LoginUser)。所以它在网址中仍为0。
要确认,您应将vocbList
和vocabulary
的代码移动到一个函数中:
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
的值传递给已定义的函数。