我正在尝试创建一个列选择器,其数据来自json doc。现在我正在为iOS设备编码,但计划在android上使用相同的代码。当我运行此代码时,选择器为空。任何帮助表示赞赏!
////
var win = Titanium.UI.createWindow({
title:"Creating a Single-Column Picker",
backgroundColor:"#FFF",
exitOnClose:true
});
var url ="http://stats.catchitkansas.com/sunflower/cik/xml/app/app_master_schools.json"; // rss feed url
var json, object_name, locatie, i, row, title, val;
//A single column picker
var picker = Ti.UI.createPicker({
bottom:0,
});
var xhr = Ti.Network.createHTTPClient({
onload: function(e) { // Ti.API.debug(this.responseText);
json = JSON.parse(this.responseText);
for (i = 0; i < json.object_name.length; i++) {
locatie = json.object_name[i];
picker.add(Ti.UI.createPickerRow({title: e.locatie.title}));
}
//Now, we need add the pickerRow objects in the data array to the picker
Ti.API.debug(this.responseText);
alert('success');
},
}
);
picker.selectionIndicator = true;
xhr.open('GET',url);
xhr.send();
//This label contains text that will change with each picker change
var results = Titanium.UI.createLabel({
text:"Select from the picker below",
height:40,
width:"auto",
top:20
});
//When using a picker, listen for the "change" event
picker.addEventListener("change", function(e){
results.text = e.row.title + ": " + e.row.val; //Pull the title and val properties from the selected pickerRow object (accessed via e.row)
});
win.add(picker);
win.add(results);
win.open();
答案 0 :(得分:1)
您的数据Feed返回格式不正确的JSON。
更改此
"object_name": {
到
"object_name":
(通过http://jsonlint.com/运行JSON找到)
更改此
picker.add(Ti.UI.createPickerRow({title: e.locatie.title}));
到
picker.add(Ti.UI.createPickerRow({title: locatie.title}));
locatie
对象不是事件变量e
的一部分,它是一个独立的变量。
在 HttpClient请求完成之前,添加了选择器。
您应该win.add(picker);
移动到for
回调中的onload
循环之后。
var xhr = Ti.Network.createHTTPClient({
onload: function(e) {
json = JSON.parse(this.responseText);
for (i = 0; i < json.object_name.length; i++) {
locatie = json.object_name[i];
picker.add(Ti.UI.createPickerRow({title: locatie.title}));
}
win.add(picker);
alert('success');
}
});