我正在尝试使用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;
});
}
});
});