2013-07-24 147 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

相关问题