排序表视图钛金属机器人

时间:2013-03-17 14:36:05

标签: javascript android sorting titanium tableview

我尝试在将json Feed插入表视图之前对其进行排序。我有一个在iOS上工作正常的方法但是当我尝试在android上实现相同的代码时,它只会排序一次。

我需要为应用程序分配至少两次数据。

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"}]

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

如果这是真正的JSON响应,那么您的数字似乎是以字符串形式传递的。如果这是正确的,你应该确保比较这些数字(我不熟悉Titanium for Android的JS翻译,也许Titanium正试图比较字符串。在iOS和Android上,JS行为有时会有所不同)。请参阅parseIntparseFloat功能。 Here are some examples

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;
    }
}