1

如何从winjs中的应用程序文件夹中读取图像

 var item = groupedProducts.getAt(indx);            
 item.img = Windows.Storage.ApplicationData.current.localFolder.path + "\\" + "3766111.jpg";
                    groupedProducts.setAt(indx, item);
                    WinJS.UI.processAll();
4

1 回答 1

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 的承诺。否则,我只返回一个指向应用程序图像文件夹中静态文件的 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

于 2013-03-22T15:58:53.930 回答