2010-08-12 5 views
4

Ext.Window 하위 클래스에 3 개의 점포 (Ext.data.JsonStore)가 있습니다. 나는이 모든 것에 save()으로 전화하고, 완료 될 때까지 대기 마스크를 표시 한 다음, 창을 닫거나 오류를 처리하고 싶습니다.ExtJS - 여러 매장에서 데이터 저장

정말 지저분한 것으로 끝나지 않고이 작업을 수행 할 수있는 방법이 있습니까? 이 호출을 save() 두 번째 저장소에서 내 첫 번째 등 save 이벤트 내에서 호출하고 콜백을 설정할 수 있도록 무언가를 함께 cobbling 그래서 마지막 저장이 저장 완료 될 때 호출 할 수 있지만 이것은 나처럼 보인다. 큰 중첩 된 엉망으로 끝날 것입니다. 그래서 이것을 깔끔하게 만드는 방법에 대한 제안은 크게 감사 할 것입니다. 같은

답변

1

뭔가 :

var saveStores = function(stores) { 

    if (stores.length === 0) { 
     console.log("All stores saved"); 
    } else { 
     var store = stores.pop(); 
     store.save({ 
      callback : function() { 
       saveStores(stores); 
      } 
     }); 
    } 
} 

saveStores([store1, store2, store3]); 

죄송합니다, 시간 테스트 없습니다 -하지만 너 한테이있을 수 있습니다.

+0

감사합니다. 나는 이것과 같은 것이 아마도 작용할 것이라고 생각한다. 사실 'save()'가 어떤 인수를 취하지 않기 때문에 각 상점의 이벤트에 먼저 등록해야하기 때문에 실제로는 조금 더 고통 스럽습니다 ... 지루한 –

+0

업데이트 된 시도를 바탕으로 답변을 게시했습니다. 이. 다시 한 번 감사드립니다 –

0

드라 실 (Drasill)이 제안한 것과 같은 것을 사용했지만 결국 조금 엉망이되었습니다. 이벤트가 작동하는 방식 때문에 처음으로 끝내기를 기다리지 않고 두 번 전화를했다면 망칠 것이라고 상상해 봅니다.

var save_multiple_stores = function(stores, success, fail) { 
    if (stores.length === 0) { 
     if (success) { 
      success(); 
     } 
    } else { 
     var store = stores.pop(); 

     var listeners = {} 

     var unbind_listeners = function() { 
      for (var evt in listeners) { 
       store.un(evt, listeners[evt]); 
      } 
     } 

     var onsuccess = function() { 
      unbind_listeners(); 
      save_multiple_stores(stores, success, fail); 
     } 

     var onfail = function() { 
      unbind_listeners(); 
      if (fail) { 
       fail(); 
      } 
     } 

     store.on('save', onsuccess); 
     listeners.save = onsuccess; 
     store.on('exception', onfail); 
     listeners.exception = onfail; 

     var num_records = store.save(); 
     //save event will not fire if there are no changed records 
     if (num_records <= 0) { 
      onsuccess(); 
     } 
    } 
}; 
+0

둘 다 테스트하지는 않았지만 더 간단한 해결책은 http://pastebin.com/zYn7xCKe입니다. 받아 줘서 고마워. – Drasill