拒绝已过滤存储的更改 - Ext.NET/ExtJS 3.4

时间:2013-10-04 13:04:13

标签: extjs ext.net

首先,与我似乎没有尝试调用的内容不同

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()不是一个选项。服务器端特权。

0 个答案:

没有答案