【发布时间】:2012-11-08 00:15:51
【问题描述】:
我正在使用 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 = function () {
alert(self.QCtest.QCTestGroups.length);
};
给self.delItems = function () {
alert(self.QCtest.QCTestGroups().length);
};
现在可以了
【问题讨论】:
标签: javascript knockout.js knockout-mapping-plugin