1

データがjsonドキュメントから派生した単一の列ピッカーを作成しようとしています。現在、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);の直後に移動する必要があります。foronload

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 に答える