【问题标题】:sessionStorage returns undefinedsessionStorage 返回未定义
【发布时间】:2015-12-22 04:25:47
【问题描述】:

我有使用 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); 行返回

未捕获的类型错误:无法读取未定义的属性“ticketNumber”

如何显示之前视图中的数据?

【问题讨论】:

  • 这意味着dataItem 是未定义的,所以它上面的行不起作用...
  • 行 "console.log("TicketNumber => " + dataItem.ticketNumber + " " + dataItem.lineNumber);"显示正确的数据
  • 在你的问题中,你说它会抛出一个错误......
  • 对不起.... 错字。修复它
  • 您正在序列化单个项目,然后尝试将其作为数组访问。 retrievedObject.ticketNumber 应该可以工作。

标签: jquery typescript kendo-grid session-storage


【解决方案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);
}

【讨论】:

  • 好吧,我的意图是将用户选择的网格行(或行)从一个 MVVM 视图传递到另一个视图(在旧学校网页中,我会使用会话对象)。我会试试你的建议。谢谢。
  • 是的,用户将选择一行或多行。所以我需要一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2016-11-18
相关资源
最近更新 更多