2015-12-21 236 views
0

我有客户端应用程序使用sessionStorage将数据从一个视图移动到另一个视图。我的代码是:sessionStorage返回undefined

$("#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);返回

Uncaught TypeError: Cannot read property 'ticketNumber' of undefined

如何显示从以前的视图中的数据线?

+0

因此,这意味着'dataItem'是未定义的,所以它上面的线是不工作... – epascarello

+0

线 “的console.log(” TicketNumber => “+ dataItem.ticketNumber +”“+ dataItem.lineNumber );”显示正确的数据 – user990423

+1

在你的问题中,你说它会引发错误.... – epascarello

回答

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); 
} 
+0

好吧,我的意图是将用户选择的网格行(或行)从一个MVVM视图传递到另一个视图(在旧式的网页中,我会使用会话对象)。我会尝试你的建议。谢谢。 – user990423

+0

是的,用户将选择一个或多个行。所以我需要一个数组。 – user990423