0

テーブル ビューに挿入する前に、json フィードを並べ替えようとしています。iOS で正常に動作するメソッドがありますが、Android で同じコードを実装しようとすると、一度だけソートされます。

アプリケーションのために、データを少なくとも 2 回ソートする必要があります。

Ti.App.addEventListener('get.stands', function(d) {

        jsonArray = JSON.parse(d.responseText);

        var hockey = jsonArray;

        //alert('Hockey Standings');
        //Ti.API.info('My data is..' + hockey);


        function sortBy(prop) {
            return function(a, b) {
                if (a[prop] > b[prop]) {
                    return -1;
                } else if (a[prop] < b[prop]) {
                    return 1;
                }
                return 0;
            }
            //hockey.sort(sortBy('conference'));
            //hockey.sort(sortBy('points'));
        }

        var data = [];


        hockey.sort(sortBy('points'));
        hockey.sort(sortBy('division'));
        hockey.sort(sortBy('conterence'));
        //myPoints.sort(function(a,b){return a - b;});
        var addRow = function(obj) {
            var teamPoint = parseInt(obj.points);
            var row = Ti.UI.createTableViewRow({
                backgroundColor : '#fff',
                //hasChild : true,
                height : '50dp',
                width : Ti.UI.SIZE
            });

            var myTeam = Ti.UI.createLabel({
                color : '#000',
                font : {
                    fontSize : 16,
                    fontWeight : 'bold'
                },
                height : Ti.UI.SIZE,
                highlightedColor : '#fff',
                left : '55dp',
                top : '0dp',
                text : obj.team,
                width : Ti.UI.SIZE
            });

            var teamPoints = Ti.UI.createLabel({
                color : '#666',
                font : {
                    fontSize : 14
                },
                height : Ti.UI.SIZE,
                highlightedColor : '#ddd',
                left : '55dp',
                top : '20dp',
                text : 'Points: ' + teamPoint.toFixed(0),
                //top: 5,
                width : Ti.UI.SIZE
            });

            var teamImage = Ti.UI.createImageView({
                    image : 'http://www.corliosity.com/json/' + obj.img,
                    left : '0dp',
                    top : '0dp',
                    height: 50,
                    width: 50
            });
                if (obj.conference)
                {
                    row.add(myTeam);
                }
                if (obj.team)
                {
                    row.add(myTeam);
                    row.add(teamPoints);
                    row.add(teamImage); 
                }
            return row;
        };
        var intItem = 0, intItems = hockey.length, strLastDivision = '', row;

        for ( intItem = 0; intItem < intItems; intItem = intItem + 1) {
            var bgcolor = (intItem % 2) ? '#fff' : "#ccc";


            row = addRow(hockey[intItem]);
            if (strLastDivision !== hockey[intItem].division) {
                strLastDivision = hockey[intItem].division;
                row.header = hockey[intItem].division;
            }

            data.push(row);
            row.setBackgroundColor(bgcolor);
        };

        var tbl = Ti.UI.createTableView({
            data : data,
            height : Ti.UI.FILL,
            //minRowHeight: 80,
            //search: search,
            //style : Ti.UI.iPhone.TableViewStyle.GROUPED,
            width : Ti.UI.FILL
        });

        win.add(tbl);

    });

JSONコードは次のようになります

[{"team":"team1", "points":"18", "division":"west","conference":"west"}, {"team":"team2","points":"23","division":"south","conference":"east"}]

事前にご協力いただきありがとうございます

4

1 に答える 1

0
[{"team":"team1", "points":"18", "division":"west","conference":"west"}, {"team":"team2","points":"23","division":"south","conference":"east"}]

これが実際の JSON 応答である場合、数値は文字列として配信されるようです。これが正しい場合は、数値が比較されていることを確認する必要があります (私は Android 用の Titanium の JS 変換に精通していないため、Titanium が文字列を比較しようとしている可能性があります。JS の動作は iOS と Android で異なる場合があります)。parseIntまたはparseFloat関数を参照してください。ここにいくつかの例があります。

function sortBy(prop) {
    return function(a, b) {
        if (parseInt(a[prop]) > parseInt(b[prop])) {
            return -1;
        } else if (parseInt(a[prop]) < parseInt(b[prop])) {
            return 1;
        }
        return 0;
    }
}
于 2013-03-17T19:22:51.143 に答える