0

我只是在学习使用 JavaScript、AngularJS 和 Parse,所以,如果我做错了什么,请说出来。我想尽可能多地学习。

我有一个任务,我被指示使用 Parse 和 AngularJS。我想company在我的companies对象中显示每一个,然后显示每一个的评级。在 Parse 中,这些存储为两个具有关系的独立对象。

我终于能够计算出评分,但是 Angular 正在覆盖评分的数据。它显示的是最后计算的评分,而不是每个评分。console.log(total)正在控制台中生成准确的数字。

这是我的控制器中用于检索的代码companies

function getCompanies() {
    new Parse.Query(Companies).find({
        success: function(results) {
            for (var i = 0; i < results.length; i++) {
                results[i].relation("ratings").query().find({
                    success: function(ratings) {
                        // retrieve stars and calculate average rating
                        var total = 0;
                        for (var o = 0; o < ratings.length; o++) {
                            var stars = parseInt(ratings[o].attributes.stars);
                            total += stars;
                        }
                        total = total / ratings.length; // get average rating

                        $scope.$apply(function() {
                            $scope.companies = results.map(function(obj) {
                                console.log(total); // produces correct results
                                return {name: obj.get("name"), rating: total, parseObject: obj};
                            })
                        });
                    }
                });
            }
        }
    });
}

在我的view我使用以下代码:

<div ng-repeat="company in companies">
    <h1>{{company.name}}</h1>
    <h3>Rating: {{company.rating}}</h3>
</div>

现在,如果我有两个companies,而他们有ratings2 和 4,那么现在 Angular 都显示 4。但是,console.log(total)将显示 2 和 4。

如果我的代码有问题,请告诉我,我想尽可能多地学习。非常感谢任何帮助,谢谢。

4

1 回答 1

0

你能试试下面的代码吗?

success: function(results) {
    for (var i = 0; i < results.length; i++) {
        var result = results[i];
        results[i].relation("ratings").query().find({
            success: function(ratings) {
                //calculate total here;
                //var total = your logic to calculate the total
                //then store the total in the result object
                result.total = total;
            }
        })
    }
    $scope.$apply(function() {
        $scope.companies = results.map(function(obj) {
            console.log(total); // produces correct results
            return {name: obj.get("name"), rating: obj.total, parseObject: obj};
        })
    });
}
于 2013-03-12T06:44:40.080 回答