0

サーバーからjsonファイルとしてダウンロードする製品のリストがあります。各アイテムには、サーバーに保存されている画像へのリンクが含まれています。

オフライン時に製品を表示できるようにしたいので、ダウンロードしたjsonファイルをforge.prefs http://docs.trigger.io/en/v1.3/modules/prefs.htmlに保存し、それを引き出して表示します画面上のアイテム。それはうまく機能しますが、正しく表示されるように画像をローカルに保存する必要もあります。

これを実現するために、forge.file.cacheURL http://docs.trigger.io/en/v1.3/features/cache.htmlを使用しようとしていますが、正しい操作順序を処理できません。画像をキャッシュするには、json ファイルを実行し、行ごとに forge.file.cacheURL を呼び出して、URL を JSON 項目に保存します。しかし、ここで forge.file.cacheURL が非同期で実行されるため、アイテムを処理してローカル画像を収集するループが終了し、コードは引き続き画像を表示 (アイテムを表示) しますが、forge.file.cacheURL はまだ収集してキャッシュします。画像は非同期操作のためです。最後のアイテムがキャッシュされていることを何らかの方法で検出し、画面上のビューを更新して正しい画像の URL を使用する必要があります...または必要なものにつながる何か他のもの。

コンセプトを理解していただければ幸いです。これを適切に処理するにはどうすればよいですか?

4

1 に答える 1

0

v1.4.26 以降、イメージをキャッシュするだけでなく、イメージを永続的に保存できるようになりました ( http://docs.trigger.io/en/v1.4/release-notes.html#v1-4-26を参照)。ニーズによっては、 および よりも優れたオプションになる場合がforge.file.cacheURLありforge.file.isFileます。

私はあなたが説明した状況に正確に従っていませんが、このようなものは、何かをする前にいくつかの非同期処理が完了するのを待つことができます:

// e.g.
var jsonCache = {
    one: "http://example.com/one.jpg",
    two: "http://example.com/two.jpg",
    three: "http://example.com/three.jpg"
};

var cacheCount = 0;
for (var name in jsonCache) {
    if (jsonCache.hasOwnProperty(name)) {
        var imageURL = jsonCache[name];
        cacheCount += 1;
        forge.file.cacheURL(imageURL, function (file) {
            forge.prefs.set(name, file, function () {
                cacheCount -= 1; // race condition, but should be fine (!)
                if (cacheCount <= 0) {
                    alert('all cached');
                }
            });
        });
    }
}
于 2013-01-25T15:57:37.273 に答える