Javascript 敲除数组中的对象数组
我对淘汰赛了解不多,但我正在积极参加。 问题: 我试图检索对象列表数组中的对象列表数组 示例:只是让它变得非常简单 教师->学生 教师1 学生1 学生2 学生3 老师2 学生1 学生2 学生3 教师3 学生1 学生2 学生3 到目前为止,我能够显示所有教师的列表,但在显示学生列表时,最后一个节点“教师3”显示教师1、2和3中的所有学生;老师1、2是空白的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
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。考虑创建一个复制问题的小提琴。请阅读正确格式的代码。谢谢你们两个。我感谢你在这个问题上对我的帮助。你们俩都很聪明。虽然我正在做的项目比逻辑老师->学生要复杂得多,但我还是能够利用你的帮助来解决我一周的挫折感。再次感谢你们俩。。。