2012-08-15 68 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