私はサーバーからJSONストアを自動的に生成するこのクラスを持っています。店舗はオンザフライで作成され、FirebugのDOMで表示できます。 Ext.Ajax.requestのコールバック関数 'AdminSettings'内にconsole.log(Ext.getStore( 'AdminSettings'))(AdminSettingsは作成されたストアの1つ)ストアが返されますが、console.log(Ext.getStore( 'AdminSettings'))をコールバック関数の外に置くと、ファイアバグで未定義のメッセージが表示され、ストアがインスタンス化されません。 実際の動作を確認するには、コードコメントを参照してください。javascript Ext.Ajax.requestのスコープの問題
Ext.Ajax.request({
url : './account/getadminstores',
callback : function(options, success, response) {
var json = Ext.decode(response.responseText);
var adminStores = new Array();
// setup and intitialize on the fly stores
for (var key1 in json) {
var storeFields = new Array();
for (var key2 in json[key1]) {// if (i==1){break;}
for (var key3 in json[key1][key2]) {
storeFields.push(key3);}
break;};
Ext.define('MA.store.' + key1, {
extend : 'Ext.data.Store',
fields : storeFields,
storeId : key1,
data : json[key1]
});
Ext.create('MA.store.'+key1);};
console.log(Ext.getStore('AdminSettings'));
//returns MA.store.AdminSettings in firebug and everything is fine
}
});//eof Ext.Ajax.request
console.log(Ext.getStore('AdminSettings'));
//returns undefined which is strange
私は非同期thing.wouldあなたは解決策を提供してください?私は同期呼び出しを使用する必要がありますか?そのようなものが存在する?私はビューポートとグリッドを持っていると私はすぐにページがロードされますグリッドではなく、 'のストアは未定義です。 –
Ext.Ajax.requestのコールバックから呼び出せる関数にグリッドの初期化コードをラップします。グリッドの準備が整うまで、カードレイアウトなどをプレースホルダとして使用する必要があります。つまり、ページがリクエストの結果に依存している場合は、すぐに使用できるように、ページ自体の一部としてクライアントにデータを配信するほうがよいでしょう。 – owlness