我正在尝试开发我的第一个 Windows 8 应用商店应用程序 (HTML/JS)。我正在使用最适合我的需求的网格应用程序模板。这是我的模型:
我有三个实体:1. GalleryCategory 2. Gallery 3. GalleryItem。画廊与一个类别正好相关联。一个 GalleryItem 只链接到一个 Gallery...所以这里没什么特别的...
我正在使用开箱即用的 data.js 文件来加载应用程序启动时的所有类别和所有画廊。但是当我打开galleryDetail.html(应该显示特定画廊的所有图像)时,我想加载画廊的所有图像。(以避免在开始时加载过多)。现在我终于来到了我不明白的地方:
我该如何管理这个?我是说
WinJS.UI.Pages.define("/pages/galleryDetail/galleryDetail.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
ready: function (element, options) {
var item = options && options.item ? Data.resolveItemReference(options.item) : Data.items.getAt(0);
element.querySelector(".titlearea .pagetitle").textContent = item.group.title;
element.querySelector("article .item-title").textContent = item.title;
element.querySelector("article .item-subtitle").textContent = item.subtitle;
element.querySelector("article .item-image").src = item.backgroundImage;
element.querySelector("article .item-image").alt = item.subtitle;
element.querySelector("article .item-content").innerHTML = item.content;
element.querySelector(".content").focus();
var galleryId = item.key;
WinJS.xhr({ url: "http://someUrlToAnAspNetWebsite/Handlers/GalleryItemsHandler.ashx?galleryId=" + galleryId }).done(
// Complete function
function (response) {
var items = JSON.parse(response.responseText);
items.forEach(function (item) {
galleryItemsList.push(item);
});
dataList = new WinJS.Binding.List(galleryItemsList);
var galleryItemsListView = document.getElementById('galleryItemsListView').winControl;
galleryItemsList.itemDataSource = dataList.dataSource;
},
// Error function
function (response) {
// handle error here...
},
// Progress function
function (response) {
// progress implementation goes here...
}
);
},
我的问题很明显......准备好的功能在检索数据之前继续/结束......因为异步调用需要一段时间。
但我认为使用承诺 (.done()) 会为我做到这一点(同步线程)?还是我需要使用 join() 函数。如果是这样,在哪里以及如何?对不起我的问题...
谢谢你的帮助...