2016-01-25 33 views
0

好吧,我創建了我的IndexedDB,在創建期間使用'store.put'創建了一些數據。 我然後關閉連接並重新打開的連接,以使用遊標到所述數據推送到WinJS綁定列表:WinJS Binding LIst中的IndexedDB「undefined」

var myData = new WinJS.Binding.List(); 
myData.push(cursorp.value); 

現在,當I 「的console.log(MYDATA的);」我得到這個:

[object Object] 
myDataStore.js (70,21) 
    { 
     [functions]: , 
     __proto__: { }, 
     _binding: undefined, 
     _currentKey: 1, 
     _keyMap: { 
     [functions]: , 
     1: { 
      [functions]: , 
      __proto__: { }, 
      data: { 
       [functions]: , 
       __proto__: { }, 
       theDay: "F", 
       id: 1, 
       listItemN: "My Note.", 
       day: "1/10/2016" 
      }, 
      handle: "1", 
      key: "1" 
     }, 
     __proto__: { } 
     }, 
     _keys: [ ], 
     _lastNotifyLength: 1, 
     _listeners: null, 
     _modifyingData: 0, 
     _notifyId: 0, 
     _pendingNotifications: null, 
     _proxy: undefined, 
     dataSource: { }, 
     length: 1, 
     onitemchanged: undefined, 
     oniteminserted: undefined, 
     onitemmoved: undefined, 
     onitemmutated: undefined, 
     onitemremoved: undefined, 
     onreload: undefined 
    } 

當我嘗試做一個ListView我得到的名單元素與「不確定」它裏面。我已經改變了它,使我得到,我想這一切三個項目:

myData.push(cursorp.value.listItemN, cursorp.value.theDay, cursorp.value.day); 

但它做同樣的事情,每個元素都有「不確定」它裏面。

我只是沒有看到如何從這個綁定列表中拉出數據。

這是我創建的模板。它通過一個命名空間會從另一個js文件的數據的價值:

var myListDataInfo = myOwnNamespce.itemList; 

    var myTemp = (function myTemplate(myPromise) { 
     return myPromise.then(function(listNote) { 
     var div = document.createElement("div"); 
     div.className = "myListContainer"; 

     var myListNote = document.createElement("h4"); 
     myListNote.innerText = listNote.myListDataInfo; 
     div.appendChild(myListNote); 

     return div; 
     }) 
    }); 

任何幫助,將不勝感激。 -Rob0

+0

我想說是綠色/新節目的某些方面導致了這些問題。我瀏覽了代碼,發現問題最可能出現的地方。有時間研究JavaScript的異步編程。我稍後再添加。 – Rob0today

回答

0

這就是爲什麼事情不工作:

  1. 我需要一個回調函數,以確保:
var myData = new WinJS.Binding.List(); 

進行處理,然後創建命名空間:

var myData = new WinJS.Binding.List(); 

     function loadData(callback) { 
      //Open new instance of DB 
      var myDataBase = indexedDB.open("notelist"); 

      myDataBase.onsuccess = function(e) { 
      var list = e.target.result.transaction("notes", "readwrite"); 
      var myStore = list.objectStore("notes"); 
      myStore.openCursor().onsuccess = function(e) { 

       var cursorp = e.target.result; 
       if (cursorp) { 
       myData.push(cursorp.value); 
       cursor.continue(); 
       } else { 
       console.log(myData); 
       console.log("Gathered Array!"); 

       if (typeof callback === "function") { 

        callback(); 

       } 
       }; 

      }; 

      }; 
     }; 

     function createMyNameSpace() { 
      WinJS.Namespace.define('myOwnNamespce', { 

       itemList: myData, 

      }); 
     }; 

爲了使回調工作,我把函數(回調)放在我的onsuccess數據庫創建中。

 myDat.onsuccess = function() { 
      myLDat = myDat.result; 
      loadData(createMyNameSpace); 

      console.log("Database initialized!"); 
     }; 
  • 我的模板的瞭解有限,在這裏打球。我發現this鏈接是有幫助的。
  • 如果你看看上面的模板代碼,你可能會看到我正在做的是試圖獲取已經通過嘗試未定義的方法獲得的數據。所以模板現在看起來是這樣:

    var myListDataInfo = myOwnNamespce.itemList; //This is not needed 
    
        var myTemp = (function myTemplate(myPromise) { 
         return myPromise.then(function(listNote) { 
         var div = document.createElement("div"); 
         div.className = "myListContainer"; 
    
         var myListNote = document.createElement("h4"); 
         myListNote.innerText = listNote.data.listItemN; //The change is in this line. 
         div.appendChild(myListNote); 
    
         return div; 
         }) 
        }); 
    

    我還發現,在理解回調this文章很有幫助。

    希望這會有所幫助。

    EDIT UPDATE

    新增變種myData的新= WinJS.Binding.List();到代碼。請注意,該代碼位於匿名函數內部。

    編輯UPDATE