首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >knockout.js选项绑定不反映添加的项

knockout.js选项绑定不反映添加的项
EN

Stack Overflow用户
提问于 2013-07-31 13:06:17
回答 2查看 50关注 0票数 0

这一页正确地显示了顾问的原始名单。但是,当我试图在数组中使用push()方法时,列表大小会更新,但是页面上的select选项列表不会更新。我需要告诉“淘汰赛”来更新吗?下面是一些示例代码:

代码语言:javascript
复制
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;
            }
        }
    }
}

代码语言:javascript
复制
function ViewModel(data) {
    var self = this;    
    this.studentAdvisers = ko.observableArray(data);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 13:10:18

您更改了js数组,而不是observableArray。您必须将更改通知knockout。你可以打电话给valueHasMutated

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-07-31 13:19:45

可观察数组与常规数组具有相同的方法,因此如果您使用:

代码语言:javascript
复制
viewModel.studentAdvisers.push(student)

而不是:

代码语言:javascript
复制
list.push(student);

和剪接一样,淘汰赛也会随着变化而变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17971265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档