WinJS中的IndexedDB绑定LIst" undefined"

时间:2016-01-25 20:39:32

标签: javascript undefined winjs indexeddb

好的,所以我创建了我的IndexedDB在创建过程中添加了一些数据,其中包含了' store.put'。 然后关闭连接并重新打开连接以使用游标将数据推送到WinJS绑定列表:

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

现在我和#34; 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);

但它做同样的事情,每个元素都有" undefined"在里面。

我只是没有看到如何从此绑定列表中提取数据。

这是我正在创建的模板。它通过命名空间从另一个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

1 个答案:

答案 0 :(得分:0)

这就是事情不起作用的原因:

  1. 我需要一个回调函数来确保:
  2. 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!");
            };
    
    1. 我对模板的有限理解在这里发挥作用。我找到了this链接以提供帮助。
    2. 如果您查看上面的代码,您可能会看到我正在尝试获取已经通过尝试未定义方法获得的数据。所以模板现在看起来像这样:

          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文章有助于理解回调。

      希望这有帮助。

      编辑更新

      添加了var myData = new WinJS.Binding.List();到代码。请注意,代码在匿名函数中。

      编辑更新