Javascript 如何使用映射函数访问敲除中的可观察数组

Javascript 如何使用映射函数访问敲除中的可观察数组,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我使用knockout.js的映射函数映射从服务器端asp.net应用程序接收的json对象。使用Chrome的调试器,我可以看到json对象被很好地接收,但是当我使用ko.mapping.fromJS创建一个可观察对象时,所有内部可观察数组显示为长度0。在QCTest中有多个阵列 var testDefJSON = getTestDefJSON(); var ViewModel = function () { var self = this; self.QCtest = ko.

我使用knockout.js的映射函数映射从服务器端asp.net应用程序接收的json对象。使用Chrome的调试器,我可以看到json对象被很好地接收,但是当我使用ko.mapping.fromJS创建一个可观察对象时,所有内部可观察数组显示为长度0。在QCTest中有多个阵列

var testDefJSON = getTestDefJSON();
var ViewModel = function () {
    var self = this;
    self.QCtest = ko.mapping.fromJS(testDefJSON);
    self.hasBuiltNewGroup = ko.observable(false);
    self.selectedOp = ko.observable();
    self.selectedUom = ko.observable();
    self.addTestGroup = function () {
        show_modal("createGroupModal");
    };
    self.saveTest = function () {
        var jsData = ko.toJS(ViewModel);
        var json = JSON.stringify(jsData);
        $.ajax({
            type: 'POST',
            url: '/Test/SaveTest',
            async: false,
            data: json,
            contentType: "application/json",
            success: function (result) { alert(result) },
            error: function () { alert("failed to post test data"); }
        });
    };
    self.delItems = function () {
        alert(self.QCtest.QCTestGroups.length);
    };
    self.closeItemModal = function () {
        ViewModel.hasBuiltNewGroup(false);
        close_modal();
    };
    self.createNewGroup = function () {
        ViewModel.hasBuiltNewGroup(true);
    };
    self.addNewTestItem = function () {
        alert("Adding new test item button works");
    };
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
当在内部数组上使用foreach/模板时,我的所有UI元素都会显示出来。但是,当我单击我的delItems按钮时,会弹出警报,指出内部数组QCTestItems的长度为0,而它至少应该为1(尽管数组中有许多测试项)

我需要能够删除您按下delItems按钮时选中的项目。要做到这一点,我需要访问该数组中的元素,因为它的长度为0,所以很难做到这一点

任何帮助都将不胜感激

编辑:

已更改
self.delItems=函数(){
警报(self.QCtest.QCTestGroups.length);
};
to
self.delItems=函数(){
警报(self.QCtest.QCTestGroups().length);
};


现在它工作了

映射插件将把你的JSON转换成可观察的。Observable(包括ObservableArray)是一个函数,因此请确保使用()表单访问实际值:

alert(self.QCtest().QCTestGroups().length);
这里有一把小提琴来演示:


加载选项后,单击按钮。显示一个警报,显示两个长度值,一个直接访问数组(显示长度为
0
),另一个访问内部数组(显示实际长度为
2
)。

谢谢,现在可以使用可观察数组中适当数量的元素发出警报。我将在添加()的情况下测试所有其他内容。