2013-07-24 2 views
0

У меня есть следующий Extjs3 ArrayStore. В другом месте я слушаю значение и перезагружаю хранилище с новыми данными в другом месте страницы (код ниже магазина). Я ищу способ 'сбросить' или REINIT магазина, чтобы это исходные данные после load..ie в следующий раз через слушательExtJs ArrayStore (перезагрузить или переустановить?) Можно?

The Store:

var applicationVersionStoreOriginalData = [ 
      <c:set var="firstLoop" value="true"/> 
      <c:forEach var="productline" items="${environmentLookup.productlines}"> 
      <c:forEach var="application" items="${productline.applications}"> 
      <c:if test="${!firstLoop}">, 
      </c:if> 
      <c:set var="firstLoop" value="false"/> 
      ["<c:out value="${application.recid}"/>","<%=ValueC.PRODUCT_NOT_LISTED%>","<%=ValueC.PRODUCT_NOT_LISTED%>"] 
      <c:forEach var="applicationversion" items="${application.applicationversions}">, 
      ["<c:out value="${application.recid}"/>","<spring:message text="${applicationversion.applicationversion}" javaScriptEscape="true"/>","<c:out value="${applicationversion.recid}"/>"] 
      </c:forEach> 
      </c:forEach> 
      </c:forEach> 
     ]; 

    var applicationversionStore = new Ext.data.ArrayStore({ 
     fields: ['applicationId', {name: 'applicationversionName', type: 'string'}, 'applicationversionId'], 
     data: applicationVersionStoreOriginalData, 
     originalData: applicationVersionStoreOriginalData 
    }); 

Нагрузка данных:

function filterApplicationVersionStore(appRecId) { 
     console.log('AppRecId =' + appRecId); 
     var store = Ext.getCmp("applicationversionCombo").getStore(); 
     var unlistedData = [[appRecId,"-- My version is not listed here --","-- My version is not listed here --"]]; 
     var applicationVersionStoreOriginalData = Ext.getCmp('applicationVersionStoreOriginalData') 
     var applicationVersionCombo = Ext.getCmp('applicationversionCombo'); 

     if (!store.originalData) { 
     store.originalData = store.getRange(); 
     } 

     if (appRecId == '0309CD56B8CF4245A49E8C201C59AD36') { 
      console.log('loading new data'); 
      store.loadData(unlistedData, false); 
      store.reload(); 
     } 
     else { 
      console.log('loading old data'); 
      if (store.originalData) { 
      store.loadData(store.originalData, false); 
      } 
     } 
    } 

Теперь я хотел бы иметь возможность перезагрузить магазин с данными из оригинала; Это возможно?

МНОГО МНОГО СПАСИБО!

Я в ExtJs3.4

вот что я вижу в консоли ..

passing appRecId to function = AAEBD771130144A3A207F8BDF10B910F 
AppRecId =AAEBD771130144A3A207F8BDF10B910F 
loading old data 

---WORKS (if i disable //store.loadData(store.originalData, false);) -- otherwise the store has dupes and seems to contain mulitples 

passing appRecId to function = 0309CD56B8CF4245A49E8C201C59AD36 
AppRecId =0309CD56B8CF4245A49E8C201C59AD36 
loading new data 

--NEW 'EMPTY' DATA IS THERE 

passing appRecId to function = 987C7D2D6D194E5196F7598DDC624480 
AppRecId =987C7D2D6D194E5196F7598DDC624480 
loading old data 

--EMPTY! 

ответ

1

магазины не поддерживает восстановление данных заменить из коробки ... Но вы может легко реализовать его самостоятельно.

Вот как это можно сделать с помощью кода:

if (some condition) { 
    // save original data before losing it 
    if (!store.originalData) { 
     store.originalData = store.getRange(); 
    } 

    var data = [ 
     [appRecId,"-- My version is not listed here --","-- My version is not listed here --"] 
    ]; 
    store.loadData(data, false); 
    store.reload(); 
} else { 
    // restore original data 
    if (store.originalData) { 
     store.loadData(store.originalData); 
    } 
    // else, that's probably still original data 
} 

Редактировать

Как быть уверенным, что originalData всегда будет существовать:

var data = [ 
    <c:set var="firstLoop" value="true"/> 
    <c:forEach var="productline" items="${environmentLookup.productlines}"> 
     <c:forEach var="application" items="${productline.applications}"> 
      <c:if test="${!firstLoop}">,</c:if> 
      <c:set var="firstLoop" value="false"/> 
      ["<c:out value="${application.recid}"/>","<%=ValueC.PRODUCT_NOT_LISTED%>","<%=ValueC.PRODUCT_NOT_LISTED%>"] 
      <c:forEach var="applicationversion" items="${application.applicationversions}">, 
       ["<c:out value="${application.recid}"/>","<spring:message text="${applicationversion.applicationversion}" javaScriptEscape="true"/>","<c:out value="${applicationversion.recid}"/>"] 
      </c:forEach> 
     </c:forEach> 
    </c:forEach> 
]; 

var applicationversionStore = new Ext.data.ArrayStore({ 
    fields: ['applicationId', {name: 'applicationversionName', type: 'string'}, 'applicationversionId'], 
    data: data, 
    originalData: data 
}); 
+0

Спасибо! Я нахожусь на правильном пути, но все еще что-то не хватает ... когда я вызываю getRange(), сначала он выглядит пустым. Нужно ли мне что-то вызывать, чтобы убедиться, что оно заполнено до getRange()? – patrick

+0

Вы можете сохранить 'originalData' в прослушивателе событий' load' с 'single: true'. Но, учитывая, как вы получаете свои данные, самым простым было бы установить свойство 'originalData' хранилища при его создании. См. Пример в моем редактировании. – rixo

+0

мужчина, я очень ценю вашу помощь .. Я обновил вопрос с помощью нового кода .. но я все еще попадаю в беду. Нужно ли мне как-то полностью очистить магазин? загрузка новых данных прекрасна, но я никогда не могу восстановить исходное состояние. – patrick

Смежные вопросы