Titanium - 使用来自json的数据创建单个列选择器

时间:2012-04-23 20:03:24

标签: xml json titanium picker

我正在尝试创建一个列选择器,其数据来自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();

1 个答案:

答案 0 :(得分:1)

问题#1

您的数据Feed返回格式不正确的JSON。

更改此

"object_name": {

"object_name":

(通过http://jsonlint.com/运行JSON找到)


问题#2

更改此

picker.add(Ti.UI.createPickerRow({title: e.locatie.title}));

picker.add(Ti.UI.createPickerRow({title: locatie.title}));

locatie对象不是事件变量e的一部分,它是一个独立的变量。


问题#3

在 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');
    } 
});