2012-06-20 3 views
0

У меня есть список продуктов, которые я загружаю как json-файл с сервера. Каждый элемент содержит ссылку на изображение, хранящееся на сервере.Как кэшировать многие изображения (в цикле) правильно, используя forge.file.cacheURL?

Теперь я хочу видеть продукты в автономном режиме, поэтому я загружаю загруженный файл 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-адреса изображений ... или что-то еще, что приведет к тому, что мне нужно.

Надеюсь, вы понимаете концепцию. Как я должен справиться с этим правильно?

+0

Не могли бы вы поделиться с фрагмент кода, который демонстрирует эту проблему? Не совсем уверен, что я следую! –

+0

Ответ может включать длинный ответ. Изображения несколько кэшированы в «браузере». Вы используете backbone.js? –

+0

Я знаю, что браузер кэширует изображения, проблема возникает, если система удаляет ваше приложение из памяти, и весь кеш браузера удален. forge.pref может выжить, это здорово ... –

ответ

0

С версии v.1.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'); 
       } 
      }); 
     }); 
    } 
} 
Смежные вопросы