我正在使用 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/template 时,我的所有 UI 元素都会显示出来。然而,当我单击我的 delItems 按钮时,会弹出警报并指出内部数组 QCTestItems 的长度为 0,而它应该至少为 1(但是数组中有许多测试项目)。
当您按下 delItems 按钮时,我需要能够删除检查的项目。为此,我需要访问该数组中的元素,并且由于它的长度为 0,因此很难做到这一点。
任何帮助将非常感激
编辑:
改为self.delItems = function () {
alert(self.QCtest.QCTestGroups.length);
};
_self.delItems = function () {
alert(self.QCtest.QCTestGroups().length);
};
现在它可以工作了