2012-08-15 26 views
1

我正在通過一些從MSDN網站的Windows 8教程工作。具體來說,我在this oneWindows 8 Javascript瘋狂 - 變量undefined

部分我的代碼(從教程複製吹我的心爲什麼它的示數下面的示例:

(function() { 
    "use strict"; 

    var list = getBlogPosts(); 
    var groupedItems = list.createGrouped(
     function groupKeySelector(item) { return item.group.key; }, 
     function groupDataSelector(item) { return item.group; } 
    ); 
    var dataPromises = []; 
    var blogs; 
    var blogPosts = new WinJS.Binding.List(); 

    function getFeeds() { 
     blogs = [ 
      { 
       key: "blog1", 
       url: 'http://windowsteamblog.com/windows/b/developers/atom.aspx', 
       title: 'tbd', updated: 'tbd', 
       acquireSyndication: acquireSyndication, dataPromise: null 
      }, 
      // lots more entries ... 
     ]; 

     blogs.forEach(function (feed) { 
      feed.dataPromise = feed.acquireSyndication(feed.url); 
      dataPromises.push(feed.dataPromise); 
     }); 

     return WinJS.Promise.join(dataPromises).then(function() { return blogs }); 
    } 

// more code... 

})(); 

在生產線dataPromises.push(feed.dataPromise);我得到的錯誤JavaScript runtime error: Unable to get property 'push' of undefined or null reference你可以看到dataPromises定義和初始化爲。一個空的數組靠近文件頂部(我也試着用new Array();初始化它)

我在做什麼錯在這裏???我猜我已經做了一些愚蠢的事情......順便說一句,在上面的代碼片段中出現的dataPromises這3個地方是只有的地方出現在項目的任何地方。

我的第一個想法是提升,但除非有什麼神奇的事情發生,我沒有在可能覆蓋頂部函數作用域的任何本地作用域中明確聲明dataPromises

+0

@nalply他正在使用Internet Explorer ** 10 **。 – Pointy 2012-08-15 20:58:43

+0

哪裏是'acquireSyndication'定義? – epascarello 2012-08-15 20:59:32

+0

您是否嘗試更改變量的名稱?也許'dataPromises'被其他地方覆蓋? – jbabey 2012-08-15 21:05:04

回答

3

您沒有正確地按照教程。該生產線

var list = getBlogPosts(); 

替換new WinJS.Binding.List()調用,這是初始化dataPromises行之後發生。

的問題是,getBlogPosts()呼籲getFeeds(),並getFeeds正在試圖推動的結果到dataPromises但行var dataPromises = []尚未執行,因此dataPromises仍然undefined

將呼叫移至getBlogPosts(),以在dataPromises變量的初始化之後。

逐行掃描調試器中的代碼應該已經以相當直接的方式暴露了這個問題。

+0

啊!知道這是愚蠢的。看起來我只有那些日子。謝謝! – Endophage 2012-08-15 21:36:55