该页面正确显示了原始顾问列表。但是,当我尝试将push()方法用于数组时,列表大小会更新,但页面上的选择选项列表不会更新。我是否需要告诉淘汰赛更新或其他什么?以下是一些示例代码:
function updateStudentAdviserList(student) {
var list = viewModel.studentAdvisers();
if (student.IsStudentAdviser() == "true" || student.IsStudentAdviser() == true) {
var alreadyInList = false;
for (var i = 0; i < list.length; i++) {
alert(list[i].Id);
if (list[i].Id == student.Id()) {
return;
}
}
list.push(student);
alert('new size: ' + list.length);
} else {
for (var i = 0; i < list.length; i++) {
alert(list[i].Id);
if (list[i].Id == student.Id()) {
list.splice(i, 1);
alert('new size: ' + list.length);
break;
}
}
}
}
function ViewModel(data) {
var self = this;
this.studentAdvisers = ko.observableArray(data);
}
答案 0 :(得分:1)
您对js
数组的更改不是observableArray
。您必须通知knockout
有关更改的信息。您可以为此致电valueHasMutated
。
function updateStudentAdviserList(student) {
var list = viewModel.studentAdvisers();
if (student.IsStudentAdviser() == "true" || student.IsStudentAdviser() == true) {
var alreadyInList = false;
for (var i = 0; i < list.length; i++) {
alert(list[i].Id);
if (list[i].Id == student.Id()) {
return;
}
}
list.push(student);
alert('new size: ' + list.length);
} else {
for (var i = 0; i < list.length; i++) {
alert(list[i].Id);
if (list[i].Id == student.Id()) {
list.splice(i, 1);
alert('new size: ' + list.length);
break;
}
}
}
viewModel.studentAdvisers.valueHasMutated();
}
答案 1 :(得分:1)
可观察数组与常规数组具有相同的方法,因此如果使用:
viewModel.studentAdvisers.push(student)
而不是:
list.push(student);
与splice相同,淘汰赛将通知变更。