您需要使用异步 API 来访问 WinJS 中的 ApplicationData 中的文件,例如下面使用的 getFileAsync 函数(这是我在数据绑定中为我的一个应用程序使用的辅助函数):
function getLocalLargeMapTile(item) {
return new WinJS.Promise(
function (completed, error, progress) {
var filename;
var sourceFolder;
if (item.latlong) {
var latandlong = item.latlong.split(", ");
var lat = latandlong[0];
var lon = latandlong[1];
filename = lat + lon + ".png";
var appData = Windows.Storage.ApplicationData.current;
sourceFolder = appData.localFolder;
sourceFolder.getFileAsync(filename).then(function (file) {
var mapUrl = window.URL.createObjectURL(file, { oneTimeOnly: true });
completed(mapUrl);
},
function (error) {
handleError(error)
});
}
else {
filename = "ms-appx:///images/megaphone_256x256.png";
completed(filename);
}
}
);
}
我在辅助函数中所做的是检查我的数据是否包含纬度和经度,如果是,则检查具有匹配文件名的文件,并且由于这些文件位于 Application Data 文件夹中,因此使用 objectURL 包装文件并返回一个带有 objectURL 的承诺。否则,我只返回一个指向应用程序图像文件夹中静态文件的 ms-appx url。以下是我如何从编程模板调用此辅助函数(我认为您不能使用声明性模板执行此操作):
var image = document.createElement("img");
image.className = "item-image";
image.src = "ms-appx:///images/megaphone_256x256.png";
result.appendChild(image);
// additional code omitted
var promise = mapTileUtil.getLocalMapTile(currentItem);
promise.done(function (mapTileUrl) {
image.src = mapTileUrl;
});
有关模板函数的更多信息,它比声明性模板提供对呈现标记的更大控制,请查看:
http://msdn.microsoft.com/en-us/library/windows/apps/jj585523.aspx
和
http://go.microsoft.com/fwlink/p/?linkid=231499
有关 Windows 应用商店应用程序开发的更多信息,请注册App Builder。