2013-07-24 140 views
0

我有以下Extjs3 ArrayStore。在其他地方,我正在監聽一個值並重新加載該頁面中其他位置的新數據(商店下面的代碼)。我正在尋找一種方式來「重置」或重新初始化店裏load..ie後,它的原始數據,下一次通聽者ExtJs ArrayStore(重新加載或重新啓動?)有可能嗎?

的商店:

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

你可以用'single:true'將'originalData'保存到'load'事件監聽器中。但考慮如何獲取數據,最簡單的方法是在創建商店時設置商店的'originalData'屬性。看我編輯中的例子。 – rixo

+0

我真的很感謝你的幫助..我用新的代碼更新了這個問題..但是我仍然陷入困境。我需要以某種方式徹底清除店鋪嗎?加載新的數據工作正常,但我似乎永遠不會恢復到原來的狀態。 – patrick

相關問題