1

jsonデータの詳細ビューを作成しようとしています。どうやって実際にアプローチするのかわからない。イベントリスナーがいますが、選択したバーの名前に基づいてデータを取得する方法がわかりません。これが私のjsonプルです:

var win =Titanium.UI.currentWindow;

var data = [];

var xhr = Titanium.Network.createHTTPClient();

var barList = Titanium.UI.createTableView({
    height:366,
    width: 320,
    top:0,
    left:0
});

win.add(barList);

xhr.onload = function () {
    var json = JSON.parse(this.responseText);
    Ti.API.info(json.length);
    for (var i = 0; i < json.length; i++) {

        var row = Titanium.UI.createTableViewRow({
            hasChild: true,
            className: 'bar-row',
            filter: json[i].bar.name
        });
        var titleLabel = Titanium.UI.createLabel({
            text: json[i].bar.name,
            font: {
                fontSize: 14,
                fontWeight: 'bold'
            },
            left: 70,
            top: 5,
            height: 20,
            width: 210
        });
        row.add(titleLabel);
        var addressLabel = Titanium.UI.createLabel({
            text: json[i].bar.address,
            font: {
                fontSize: 10,
                fontWeight: 'normal'
            },
            left: 70,
            top: 25,
            height: 40,
            width: 200
        });
        row.add(addressLabel);
        var iconImage = Titanium.UI.createImageView({
            text: json[i].bar.logo_file_name,
            width: 50,
            height: 50,
            left: 10,
            top: 10
        });
        row.add(iconImage);
        data.push(row);

        row.addEventListener('click',function(e){
        var detail = Ti.UI.createWindow({
            title: e.rowData.title
        });

    detail.open({modal: true});

})

    }
    barList.data = data;



};


xhr.open('GET', 'http://site.com/db.json');

xhr.send();

JSONデータ:選択したバーの名前、説明、mon_special、tues_specialなどを取得しようとしています

http://pastie.org/private/eyp9m5il6hrulbds76a8q

4

1 に答える 1

1

これを行う最も簡単な方法は、作成した行にデータを添付することです。

var row = Titanium.UI.createTableViewRow({
    hasChild: true,
    className: 'bar-row',
    filter: json[i].bar.name,
    barData : json[i].bar
});

次に、TableView 自体に追加されたイベント リスナーを介してアクセスします(行自体を作成した場合は、イベントの rowData オブジェクトを使用しないでください)。

barList.addEventListener('click', function(e) {
    // Get the row clicked, then get our custom attribute
    var passedJSONBarData = e.row.barData;
    // Now pass along through the window, or build the window here
    var detail = Ti.UI.createWindow({
        title: passedJSONBarData.title,
        barData : passedJSONBarData
    });

    detail.open({modal: true});
});

イベントリスナーをテーブルに追加して、このアプローチを使用してパフォーマンス/メモリを節約できる場合にのみ関数を作成できるようにします。

于 2013-02-16T16:48:49.097 に答える