1

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

1 回答 1

1

问题 #1

您的数据馈送返回格式不正确的 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');
    } 
});
于 2012-04-23T20:08:00.270 回答