2015-12-21 199 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