2012-06-20 6 views
0

서버에서 json 파일로 다운로드 한 제품 목록이 있습니다. 각 항목에는 서버에 저장된 이미지에 대한 링크가 있습니다.forge.file.cacheURL을 사용하여 많은 이미지를 (루프에서) 올바르게 캐시하는 방법은 무엇입니까?

오프라인에서 제품을 볼 수있게하려면 다운로드 한 json 파일을 forge.prefs http://docs.trigger.io/en/v1.3/modules/prefs.html에 저장하고 화면에 항목을 표시하려면 꺼내십시오. 그것은 좋은 일하지만 올바르게 표시하려면 localy 이미지를 저장할 필요가있다.

이 문제를 해결하려면 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

v1.4.26부터 캐싱하지 않고 이미지를 영구적으로 저장할 수 있습니다 (http://docs.trigger.io/en/v1.4/release-notes.html#v1-4-26 참조). 필요에 따라 forge.file.cacheURLforge.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'); 
       } 
      }); 
     }); 
    } 
} 
관련 문제