Javascript 敲除数组中的对象数组

Javascript 敲除数组中的对象数组,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,我对淘汰赛了解不多,但我正在积极参加。 问题: 我试图检索对象列表数组中的对象列表数组 示例:只是让它变得非常简单 教师->学生 教师1 学生1 学生2 学生3 老师2 学生1 学生2 学生3 教师3 学生1 学生2 学生3 到目前为止,我能够显示所有教师的列表,但在显示学生列表时,最后一个节点“教师3”显示教师1、2和3中的所有学生;老师1、2是空白的 var ViewModel = { Teachers: ko.observableArray([]) } function L

我对淘汰赛了解不多,但我正在积极参加。 问题: 我试图检索对象列表数组中的对象列表数组

示例:只是让它变得非常简单

教师->学生

教师1

学生1 学生2 学生3 老师2

学生1 学生2 学生3 教师3

学生1 学生2 学生3 到目前为止,我能够显示所有教师的列表,但在显示学生列表时,最后一个节点“教师3”显示教师1、2和3中的所有学生;老师1、2是空白的

var ViewModel = {
       Teachers: ko.observableArray([])
}

function LoadTeachers(....) //Here Teacher list is loaded successfully.>

ko.applyBindings(ViewModel);


function teacher(T){
 this.TeacherID:ko.observable(T.TeacherID);
 this.TeacherName: ko.observable(T.TeacherName);

 this.StudentArray = ko.observableArray([]);

 function student(s){
    this.StudentID=ko.observable(s.StudentID);
    this.Name = ko.observable(s.s.Name);
 }

$.getJson('...');  // here is where Student array is loaded. 

}
然后我会在我的查看页面中:

foreach: Teacher  
foreach: Student
我只是用我的C语言知识来申请淘汰赛。我认为问题在于在teacher对象中声明Student数组。因为学生是每个老师的孩子。这就是我在C中应该做的

有人知道这种编码是否可行吗?希望是这样


提前感谢

如果你想让老师展示学生,应该有办法

Teacher = function (data) {
    var self = this;
    self.Id = ko.observable(data.Id || 0);
    self.Name = ko.observable(data.Name || '');
    // See JSFiddle for mapping
    self.Students = ko.mapping.fromJS(data.Students, StudentMapping);
    return self;
};

Student = function (data) {
    var self = this;
    self.Id = ko.observable(data.Id || 0);
    self.Name = ko.observable(data.Name || '');
    return self;
};

StaffViewModel = function (data) {
    var self = this;
    // See JSFiddle for mapping
    ko.mapping.fromJS(data, StaffMapping, self);
    return self;
};
我使用的是原始的Knockout映射插件,但是您可以使用viewmodel插件


如果您希望在单独的列表中显示学生和教师,那么我建议不要使学生成为“教师”的可观察属性,而是使用ViewModel构造函数中的一些代码来创建唯一的学生列表。映射插件在这里仍然会有帮助,因为“key”功能可以防止重复。

我忽略了Knockout映射插件,它很好,但暂时写得不太好。原因是让您可以简单地看到解决方案。所以你有一些古怪的地方,但大多数时候你都犯了一个了结错误。代码中最重要的部分是var newTeacher=。。。。这一点很重要,因为您需要在嵌套的ajax闭包中包含它。下面是代码和工作小提琴的链接:

$(document).ready(function(){
    var ViewModel = {
        Teachers: ko.observableArray([])
    };

    // some fake data to use instead of the ajax calls below, just so it works in fiddle
    var fakeTeacherData = [{TeacherID: 1, TeacherName: 'Dan'}, {TeacherID: 2, TeacherName: 'Marian'}];
    var fakeStudentData = [{StudentID: 1, Name: 'Student 1'}, {StudentID: 2, Name: 'Student 2'}];

    $.get('/echo/json', function(teacherData){
        // here you would use the data passed in of course
        ko.utils.arrayForEach(fakeTeacherData, function(T){
            var newTeacher = new teacher(T);
            ViewModel.Teachers.push(newTeacher);

            $.get('/echo/json', function(studentData){
                // here you would use the data passed in of course   
                ko.utils.arrayForEach(fakeStudentData, function(S){
                    newTeacher.Students.push(new student(S));
                });
            });
        });
    });
    ko.applyBindings(ViewModel);
});

function teacher(T){
    this.TeacherID = ko.observable(T.TeacherID);
    this.TeacherName = ko.observable(T.TeacherName);
    this.Students = ko.observableArray([]);
}

function student(S){
    this.StudentID = ko.observable(S.StudentID);
    this.Name = ko.observable(S.Name);
}

请发布正确的javascript和html。考虑创建一个复制问题的小提琴。请阅读正确格式的代码。谢谢你们两个。我感谢你在这个问题上对我的帮助。你们俩都很聪明。虽然我正在做的项目比逻辑老师->学生要复杂得多,但我还是能够利用你的帮助来解决我一周的挫折感。再次感谢你们俩。。。