KO.utils.arrayPushAll将选择更改的新元素添加到另一个选定的框和网格

时间:2012-08-24 20:19:01

标签: knockout.js ko.observablearray

我试图从使用knockout.js库在MVC4中编写的JSON响应中提取数据。我有三个需要填充的区域,第一个是多选框。我看过网上的例子和参考文献,以及这里链接的小提琴手无济于事。我遇到问题的区域是填充arrayTwo和网格数组,其中包含在arrayOne列表中选择的每个项目的所有数据。

function viewModel() {
    this.arrayOne = ko.observableArray();
    this.chosenarrayOne = ko.observableArray();
    this.arrayTwo = ko.observableArray();
    this.gridArray = ko.observableArray();
    this.chosenarrayTwo = ko.observableArray();
    this.chosenarrayOne.subscribe(function (nIds) {
        mvvm.arrayTwo(undefined);
        mvvm.gridArray(undefined);
        var nDx;
        if (nIds != null) {
            for (nDx = 0; nDx < nIds.length; nDx++) {
                $.ajax({
                    url: '{Working URL Omitted}',
                    data: { nValue: arrayOne[nDx] },
                    type: 'GET',
                    success: function (data) {
                        mvvm.arrayTwo(data);
                    },
                    error: function () {
                        alert('Array Two ajax error');
                    }
                });
                $.ajax({
                    url: '{Working URL Omitted}',
                    type: 'GET',
                    data: { nValue: nIds[nDx] },
                    success: function (data) {
// Example of what I would like to happen, however I get nothing back
                        mvvm.gridArray.arrayPushAll(data);

                        //mvvm.gridArray(data);
                    },
                    error: function () {
                        alert('Grid Array ajax error');
                    }
                });
            }
        }
    }, this);
}
var mvvm = new viewModel();
ko.applyBindings(mvvm);
$.ajax({
    url: '{Working URL Omitted}',
    type: 'GET',
    success: function (data) {
        mvvm.arrayOne(data);
    },
    error: function () {
        alert('Array One ajax call error');
    }
});

我已经尝试过json-ing响应以查看返回的内容,并以数组形式返回值。但是,如果arrayOne var中有多个元素,则不会返回任何内容。

1 个答案:

答案 0 :(得分:1)

在你的ajax调用中,你发送了错误的数据。如果你想获得observableArray中的值,你必须这样:

arrayOne()[nDx] instead of arrayOne[nDx]

选中此example