这一页正确地显示了顾问的原始名单。但是,当我试图在数组中使用push()方法时,列表大小会更新,但是页面上的select选项列表不会更新。我需要告诉“淘汰赛”来更新吗?下面是一些示例代码:
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);
}发布于 2013-07-31 13:10:18
您更改了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();
}发布于 2013-07-31 13:19:45
可观察数组与常规数组具有相同的方法,因此如果您使用:
viewModel.studentAdvisers.push(student)而不是:
list.push(student);和剪接一样,淘汰赛也会随着变化而变化。
https://stackoverflow.com/questions/17971265
复制相似问题