我有使用sessionStorage将数据从一个视图移动到另一个视图的客户端应用程序。我的代码是:
$("#reportGrid").find("input:checked").each(function () {
rows.push($(this).closest('tr'));
var dataItem = grid.dataItem($(this).closest('tr'));
console.log("TicketNumber => " + dataItem.ticketNumber + " " + dataItem.lineNumber);
// store dataItem in session Storage;
sessionStorage.setItem('selectedRecords', JSON.stringify(dataItem));
var retrievedObject = JSON.parse(sessionStorage.getItem('selectedRecords'));
console.log("Begin -----------");
console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);
console.log("End -----------");
})
然而,行console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);
返回
未捕获的TypeError:无法读取未定义的属性'ticketNumber'
如何显示上一个视图中的数据?
答案 0 :(得分:1)
读取您希望循环遍历项目数组的代码并获取所有已检查的代码。目前,您正在循环检查已检查的项目并将每个项目存储到会话变量中,并继续对其进行书写。当你阅读它时,你将只有一个项目。如果这是您想要的,那么您只需要引用该对象,而不是执行数组语法。
console.log("userSelectedRecords => " + retrievedObject.ticketNumber);
但我认为这不是你想做的。我想你想要一个用户选择的元素数组。要拥有一个数组,您需要构建列表,而不是在循环结束时保存整个数组。
//temp holding place for the data
var records = [];
$("#reportGrid").find("input:checked").each(function () {
var dataItem = grid.dataItem($(this).closest('tr'));
records.push(dataItem); //push the element
});
//save it to localstorage
sessionStorage.setItem('selectedRecords', JSON.stringify(records));
//now your syntax would work
var retrievedObject = JSON.parse(sessionStorage.getItem('selectedRecords'));
if (retrievedObject.length) { //make sure we have at least one item
console.log("userSelectedRecords => " + retrievedObject[0].ticketNumber);
}