【发布时间】:2015-10-10 16:16:56
【问题描述】:
如下图我使用的是淘汰赛。我有多个视图模型,我正在组合并传递给控制器。问题是,当我运行应用程序时,在浏览器打开时单击 F12 检查错误时,我遇到了这个小问题:
未捕获的 RangeError:超出最大调用堆栈大小
function FullEmployeeProfile ()
{
var EmployeeEdu = new employeeEducation();
var EmployeeHist = new employeeEducation();
var EmpInfo = new employeeEducation();
}
function employeeInfo() {
var ei = this;
var ei = this;
ei.Name = ko.observable("");
ei.ID = ko.observable("");
ei.Gender = ko.observable("");
ei.address = ko.observable("") ;
}
function employeeHistory() {
var eh = this
var self = this;
eh.CompanyName = ko.observable();
eh.Designation = ko.observable();
eh.StartDate = ko.observable();
eh.EndDate = ko.observable();
}
function employeeEducation() {
var ee = this;
ee.Degree = ko.observable();
ee.YearOfPassing = ko.observable();
ee.Percentage = ko.observable();
ee.Institute = ko.observable()
ee.fullEmployeeDetails = new FullEmployeeProfile();
ee.saveEmployeeDetails = function() {
$.when(postSecureData("/api/EmployeeProfile/", ko.toJSON(ee.fullEmployeeDetails)))
.done(function (empProfile) {
if (response.ResponseRequired == false) {
document.getElementById("save-empDetails-btn").innerHTML = "Saving...";
setTimeout(function () { document.getElementById("save-empDetails-btn").innerHTML = "Save" }, 2500);
$.msgGrowl({
type: 'info',
title: 'Employee information saved',
}); }
});
};
}
【问题讨论】:
-
您似乎已将
function employeeEducation定义粘贴了两次。 -
@RoyJ 感谢您指出我已经进行了必要的调整
-
您的 FullEmployeeProfile 应该初始化成员变量(基于
this)而不是本地(var)变量。现在,它为ee.fullEmployeeDetails构造了一个空对象 -
@RoyJ 我按照您的建议进行了更改,但似乎无法解决“未捕获 RangeError:超出最大调用堆栈大小”问题
-
这就是为什么我没有将其发布为答案。 :) 错误通常是由于无限递归而发生的:一个函数调用自身(或另一个调用第一个函数的函数,或其他)。我在您在这里发布的代码中看不到这一点。你所做的一些事情在风格上不是很淘汰,例如设置
innerHTML——那些应该通过文本绑定来完成。同样,这不是问题的根源,但会使您的代码更整洁。
标签: javascript knockout.js single-page-application