角度选择弱相等

时间:2014-11-12 17:35:09

标签: angularjs parse-platform

我正在尝试使用parse.com后端构建一个角度应用程序。在应用程序中,学生可以被放入许多教室中的一个。我有一个视图,显示每个学生的一行,并在每一行<select>,其选项是可以分配给学生的教室。我能够最初分配并保存来自student-&gt;教室的指针。

控制器让事情变成这样:

Student.withGrade($scope.grade).then(function(students) {
    // this eagerly fetches each student's assigned classroom
    $scope.students = students;
});

Classroom.withGrade($scope.grade).then(function(classrooms) {
    $scope.classrooms = classrooms;
});

课堂选择器看起来像这样:

<select class="form-control" name="classroom" ng-model="student.classroom"
    ng-options="classroom.name for classroom in classrooms"></select>

问题是,如果我重新加载页面,即使有些学生已经初始化了他们的课堂指针,教室选择的那些行也没有显示该教室(它看起来没有初始化)。

我认为原因是,即使学生的课堂对象等同于范围内的其中一个教室,它们也会通过不同的提取来检索,因此它们不是 等于<select>

有没有办法让select测试等同(比如,像classroom.id)而不是相等?

我认为解决这个问题的一种方法是等待两个查询完成,然后通过学生运行并用指向等效教室的指针替换他们的教室指针,但这看起来很疯狂。 (我仍然需要将整个课堂对象选择到student.classroom,因为这是解析所需要的,以便妥善保存学生。)

编辑 - 刚刚确认问题是选择相等。这解决了问题,但必须有一种方法可以让select进行等效性测试(.id == c.id

Student.withGrade($scope.grade).then(function(students) {
    // this eagerly fetches each student's assigned classroom
    $scope.students = students;
    return Classroom.withGrade($scope.grade);
}).then(function(classrooms) {
    $scope.classrooms = classrooms;

     // yuck - resolve the students' classroom pointers so the selectors will work
    _.each($scope.students, function(student) {            
        if (student.classroom) {
            student.classroom = _.find(classrooms, function(c) {
                return student.classroom.id == c.id;
            });
        }
    });
});

0 个答案:

没有答案