我是
Windows 8移动应用程序开发的新手.
我在Javascript / HTML5中自定义“网格应用程序”并尝试修改data.js以获取数据并填充“SampleDate”数组.
从Web订阅源获取数据已完成,但问题是请求是异步执行而不等待响应.
数组总是变空,但是当我尝试将数组数据记录到控制台时,它会在获取后正确记录.
这就是我改变默认的generateSampleData()方法的方法;
WinJS.xhr({ url: "http://www.yamu.lk/Feed/" }) .done(function complete(result) { console.log(result.responseXML); var items = result.responseXML.querySelectorAll("item"); for (var n = 0; n < items.length; n++) { sampleItems[n] = { group: sampleGroups[0],title: items[n].querySelector("title").textContent,subtitle: "Item Subtitle: 1",description: items[n].querySelector("description").textContent,content: itemContent,backgroundImage: lightGray }; console.log(items[n].querySelector("title").textContent); } },function error(error) { },function progress(result) { }); return sampleItems;
解决方法
你的问题源于你的ListView没有直接绑定到sampleItems数组,它被绑定到一个绑定了listItems的绑定列表.查看data.js的第12行:
generateSampleData().forEach(function (item) { list.push(item); });
您要做的是等待将数据推送到绑定列表,直到从Web服务检索到它为止.一种方法是让generateSampleData()函数返回WinJS.xhr promise而不是sampleItems数组.所以generateSampleData()变成:
return WinJS.xhr({ url: "http://www.yamu.lk/Feed/" });
和第12行成为:
generateSampleData().done(function complete(result) { console.log(result.responseXML); var items = result.responseXML.querySelectorAll("item"); for (var n = 0; n < items.length; n++) { list.push({ group: sampleGroups[0],backgroundImage: lightGray }); console.log(items[n].querySelector("title").textContent); }});
或类似的规定.
绝对查看binding lists如何工作以获取更多信息.