以下で使用する getFileAsync 関数など、WinJS で ApplicationData のファイルにアクセスするには、非同期 API を使用する必要があります (これは、アプリのデータ バインディングで使用するヘルパー関数です)。
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 を返すだけです。プログラム テンプレートからこのヘルパー関数を呼び出す方法を次に示します (宣言型テンプレートではこれを実行できないと思います)。
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に登録してください。