Javascript stringify(ComplexArray)返回一个空字符串
我有以下使用JQuery和Knockout的JavaScript(我有将这两种语言结合使用的具体原因)Javascript stringify(ComplexArray)返回一个空字符串,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有以下使用JQuery和Knockout的JavaScript(我有将这两种语言结合使用的具体原因) 因为self.items是一个敲除可观察项,所以应该使用敲除函数.toJS()来获取值:ko.toJS(self.items) 或者,如果要将项目直接转换为JSON,可以使用.toJSON() 我相信您有很好的理由一起使用jQuery和Knockout,但由于这个原因,您的代码很难理解。尝试使用self.items()获取self.items的值items数组是否实际包含任何值?您是否尝试过使
因为
self.items
是一个敲除可观察项,所以应该使用敲除函数.toJS()
来获取值:ko.toJS(self.items)
或者,如果要将项目直接转换为JSON,可以使用.toJSON()
我相信您有很好的理由一起使用jQuery和Knockout,但由于这个原因,您的代码很难理解。尝试使用self.items()获取self.items的值items数组是否实际包含任何值?您是否尝试过使用Firebug/Chrome开发工具进行调试?太棒了!事实上,我几天前就知道了这一点,但我日夜都在忙着制定最后期限——在这个过程中我忘记了这一点。谢谢你指出这一点,这正是我所需要的!我将为任何需要我的新工作代码的人发布它。我想我需要补上一些睡眠。
$(document).ready(
function () {
var Crime = function (Id, CaseNumber, DateOfIncident, Description) {
var self = this;
self.Id = Id;
self.CaseNumber = CaseNumber;
self.DateOfIncident = DateOfIncident;
self.Description = Description;
}
var CrimesViewModel = function () {
var self = this;
//Data
self.items = ko.observableArray()
//operations
addCrime = function () {
if ($("#AddCrimeForm").valid()) {
crime = new Crime(0,
$("#AddCrimeForm #CaseNumber").val(),
$("#AddCrimeForm #DateOfIncident").val(),
$("#AddCrimeForm #Description").val());
self.items.push(this.crime);
$("#AddCrimeForm #CaseNumber").val("");
$("#AddCrimeForm #DateOfIncident").val("");
$("#AddCrimeForm #Description").val("");
}
}
self.removeCrime = function (item) {
self.items.remove(item);
}
loadCrimes = function (JSONstring) {
try {
self.JSONItems = JSON.parse(JSONstring);
if (self.JSONItems != null)
if (self.JSONItems != null)
for (i = 0; i < self.JSONItems.length; i++)
self.items.push(self.JSONItems[i]);
}
catch (e) {
alert(e.message + "\n\n" + e.description + "\n\n" + e.stack)
}
}
getCrimes = function () {
var self = this;
return JSON.stringify(self.items);
}
}
var CrimesVM = new CrimesViewModel()
ko.applyBindings(CrimesVM, $("#CrimeList")[0])
}
);
$(document).ready(
function () {
var Crime = function (Id, CaseNumber, DateOfIncident, Description) {
var self = this;
self.Id = Id;
self.CaseNumber = CaseNumber;
self.DateOfIncident = DateOfIncident;
self.Description = Description;
}
var CrimesViewModel = function () {
var self = this;
//Data
self.items = ko.observableArray()
//operations
addCrime = function () {
if ($("#AddCrimeForm").valid()) {
crime = new Crime(0,
$("#AddCrimeForm #CaseNumber").val(),
$("#AddCrimeForm #DateOfIncident").val(),
$("#AddCrimeForm #Description").val());
self.items.push(this.crime);
//Update the correspoding hidden field
$("#CrimeCollection_New").val(ko.toJSON(self));
$("#AddCrimeForm #CaseNumber").val("");
$("#AddCrimeForm #DateOfIncident").val("");
$("#AddCrimeForm #Description").val("");
}
}
self.removeCrime = function (item) {
self.items.remove(item);
//Update the correspoding hidden field
$("#CrimeCollection_New").val(ko.toJSON(self));
}
loadCrimes = function (JSONstring) {
try {
self.JSONItems = JSON.parse(JSONstring);
if (self.JSONItems != null)
if (self.JSONItems != null)
for (i = 0; i < self.JSONItems.length; i++)
self.items.push(self.JSONItems[i]);
}
catch (e) {
alert(e.message + "\n\n" + e.description + "\n\n" + e.stack)
}
}
}
var CrimesVM = new CrimesViewModel()
ko.applyBindings(CrimesVM, $("#CrimeList")[0])
}
);