var item = groupedProducts.getAt(indx);
item.img = Windows.Storage.ApplicationData.current.localFolder.path + "\\" + "3766111.jpg";
groupedProducts.setAt(indx, item);
WinJS.UI.processAll();
答案 0 :(得分:1)
您需要使用异步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返回promise。否则,我只是返回一个ms-appx url,指向app的images文件夹中的静态文件。以下是我从程序模板中调用此辅助函数的方法(我不认为您可以使用声明性模板执行此操作):
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。