#javascript #ajax #sencha-touch #iteration #store
#javascript #ajax #sencha-touch #итерация #Магазин
Вопрос:
Как прочитать объект json (результат вызова ajax) внутри initcomponent панели. Я использовал следующий код
initComponent : function() {
Ext.regModel('allVisit', {
fields: [
{ name: 'visitDate', type: 'date'},
{ name: 'doctorInfo', type: 'string'},
{ name: 'patientId', type: 'string'},
{ name: 'visitType', type: 'string'},
{ name: 'referedBy', type: 'string'},
{ name: 'visitId', type: 'string'},
]
});
var allVisitStore = new Ext.data.Store({
model: 'allVisit',
autoLoad : true,
proxy: {
type: 'ajax',
id: 'allvisit_app_localstore',
url: '/RadMobApp/api',
extraParams:{
action:'test',
queryName:'GET_ALL_test',
retFormat:'XML',
patId: '123',
keyValuePair:'yes'
},
// the return will be XML, so lets set up a reader
reader: new Ext.data.XmlReader({
// records will have an "T4" tag
record: 'data'
})
}
});
var jsonObj = [];
allVisitStore.load();
allVisitStore.data.each(function() {
jsonObj.push({xtype:"panel", title: this.data['visitDate'] " (" this.data['visitType'] ") " this.data['doctorInfo'] , html : this.data['patientId'], style : 'padding-bottom:10px;'});
});
this.items = jsonObj;
RadMobApp.views.clinicalPanel.superclass.initComponent.call(this);
}
Код итерации хранилища данных (приведенный ниже) выполняется перед получением значения запроса ajax. Я использовал функцию setTimeout для следующего набора кода
var jsonObj = [];
allVisitStore.load();
allVisitStore.data.each(function() {
jsonObj.push({xtype:"panel", title: this.data['visitDate'] " (" this.data['visitType'] ") " this.data['doctorInfo'] , html : this.data['patientId'], style : 'padding-bottom:10px;'});
});
this.items = jsonObj;
RadMobApp.views.clinicalPanel.superclass.initComponent.call(this);
но бесполезно, я получаю проблему.
Ответ №1:
Используйте функцию загрузки, подобную этой, которая гарантирует, что она выполняется после загрузки хранилища!
activityStore.load(function(records, operation, success) {
console.log('num of activities loaded: ' activityStore.data.length);
});