Это должно быть очень простым понятием, но я просто не понимаю.В приложении Titanium у меня есть массив данных, используемый несколькими окнами, мой результат xhr должен быть передан на верхний уровень пространства имен моего приложения для добавления в массив.Я могу успешно проанализировать ответ JSON внутри функции onload, но я хочу отделить свой код данных от генерации пользовательского интерфейса.
Вот упрощенная версия app.js, чтобы я мог понять концепцию,И нет, я не буду загрязнять глобальное пространство имен в моем реальном приложении.
Titanium.UI.setBackgroundColor('#000');
var myArray = [];
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function() {
myArray = JSON.parse(this.responseText);
// var data = JSON.parse(this.responseText); // no help
// myArray.push(data); // no help
// return myArray; // no help
};
xhr.onerror = function() {
Titanium.UI.createAlertDialog({ message:"Something has gone terrible wrong."});
};
xhr.open('GET','http://myapp.com/data.json');
xhr.send();
var win = Ti.UI.createWindow();
var view = Titanium.UI.createView({
backgroundColor:'green'
});
var caption = myArray[2].caption;
var label = Ti.UI.createLabel({
color:'white',
text:caption,
textAlign:'center'
});
view.add(label);
win.add(view);
win.open();
Спасибо за ваше терпение!
Редактировать
Этодает правильный результат с точки зрения пользователя, но я хочу получить доступ к массиву вне области функции onload.Я не хочу смешивать код пользовательского интерфейса с вызовами API.
xhr.onload = function() {
myArray = JSON.parse(this.responseText);
var caption = myArray[2].caption;
var label = Ti.UI.createLabel({
color:'white',
text:caption,
textAlign:'center'
});
view.add(label);
};