首先,与我似乎没有尝试调用的内容不同
myStore.rejectChanges();
在过滤后的商店中。这将是理想的,但在代码检查和阅读文档后,我发现它不起作用。我将与一些示例商店合作,并解释我想做什么,以便解决这个问题。假设我有两家商店:
<ext:Store ID="productStore" runat="server" UseIdConfirmation="true">
<Reader>
<ext:JsonReader IDProperty="productID">
<Fields>
<ext:RecordField Name="productID" Type="Int" />
<ext:RecordField Name="productName" Type="String" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
记录字段只是虚假的数据,以帮助我了解我的观点。下一家商店:
<ext:Store ID="productHistoryStore" runat="server" UseIdConfirmation="true">
<Reader>
<ext:JsonReader IDProperty="productHistoryID">
<Fields>
<ext:RecordField Name="productID" Type="Int" />
<ext:RecordField Name="status" Type="String" />
<ext:RecordField Name="date" Type="Auto" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
productStore实际上与productHistoryStore有1..1的关系。这不是我真实场景中的产品,但我认为使用这个例子可能更容易。我会尽量让它更清楚:
productStore.data.items: productStoreHistory.data.items:
productID: 1 productID: 1
productName: 'product1' status: 'available'
date: 04/01/2013
productID: 2
productName: 'product2' productID: 1
status: 'unavailable'
productID: 3 date: 06/01/2013
productName: 'product3'
productID: 2
status: 'available'
date: 04/01/2013
productID: 2
status: 'unavailable'
date: 06/01/2013
productID: 2
status: 'available'
date: 08/01/2013
productID: 3
status: 'available'
date: 04/01/2013
最后,整个过程如何工作:projectStore绑定到GridPanel。点击一行后,它会打开一个模态窗口,其中仅包含有关所点击产品的详细信息:
<RowClick Handler="openHistoryWindow(rowIndex) />
处理程序的功能:
var openHistoryWindow = function(rowIndex){
var productID = productStore.getAt(rowIndex).data.productID);
productHistoryStore.filter('productID', productID);
historyWindow.show();
}
实际上,如果有更好的方法来查找clicked行的productID RecordField的值,我也想知道这一点,只要它不会弄乱这里提供的整个结构。
最后,我可以说明一点:historyWindow允许用户更改所选的产品状态。规范要求窗口具有“确认”和“取消”按钮。就像我之前说的那样,实际场景不是关于产品,所以它不仅允许用户更改状态(更像是添加新状态;实际上还有一堆其他数据),但它允许他删除以前添加的状态,并且有什么地方可以击中粉丝。使用
从绑定了productHistoryStore的GridPanel中删除记录productHistoryGrid.deleteSelected();
将从productHistoryStore.data.items中删除它,并在运行时插入到productHistoryStore.deleted中。没关系。如果我打电话给
productHistoryStore.rejectChanges();
取消后,您认为它会起作用。它确实如此,但它带来了价格。在某种情况下,我删除了'产品1'的最后状态并确认了它,然后我删除了'产品2'的状态并取消了它,rejectChanges()将恢复'产品1'的删除状态为好。这是Ext的预期行为,但我想知道是否有办法取消/拒绝实际取消的条目的更改,而不必循环删除的数组并“手动”删除它们,这也会迫使我手动将这些条目重新添加到productHistoryStore.data.items中,并将大量糟糕的代码作为副产品。
顺便说一下,确认后的commitChanges()不是一个选项。服务器端特权。