1

すべての行が編集モードで、[保存] ボタンを 1 回クリックするだけで各行の値を一度に保存できるグリッドを作成する必要があります。これは可能ですか?もしそうなら、これを行う最善の方法は何ですか? この要件にExtJsのグリッドを使用するのは良い考えですか? Ext Js の例を見ると、フレームワークの開発者は、テーブル全体ではなく、一度に 1 つの行またはセルでグリッドを編集することを強く推奨しているようです。

また、ページングは​​必須ではないことにも注意してください。

更新: Ext JS 3.4 を使用しています。

4

2 に答える 2

1

更新: わかりました、これは Ext JS v. 4.x にぴったりです :)

できることは、基になる Store に を設定してautoSync: false、変更がすぐにサーバーに書き込まれないようにすることです。

保存ボタンで呼び出すだけですgrid.getStore().sync()

参照: API - Ext.data.Store.sync()

于 2013-04-12T15:54:50.157 に答える
1

以下のコードが役立ちます:

/**
 *   This method is called on save button click by passing the grid object as a parameter
 */
saveGridModifiedRecords = function (yourGrid) {
    Ext.getCmp("yourGridId").body.mask('Saving Record Please Wait...');
    var modifiedRecords = yourGrid.getStore().getModifiedRecords();
    var CIxml = StringToXML("<Root/>");
    for (var i = 0; i < modifiedRecords.length; i++) {
        var fields = modifiedRecords[i]; // Gives you each edited record
        var cuurElem = CIxml.createElement("I");
        cuurElem.setAttribute("name", fields.get("name")); // Here name is the dataindex of a field
        cuurElem.setAttribute("category", fields.get("category")); // Here category is the dataindex of a field
        CIxml.documentElement.appendChild(cuurElem);
    }

    Use an AJAX call to send this xml with modified records to server.

    Ext.Ajax.request({
        url : 'yourWebServiceURL/parameter1/parametr2',
        method : 'POST',
        timeout : 120000,
        params : {
            'strIPXML' : CIxml.xml
        }, // We are passing xml as a string here by using .xml
        success : function (response) {
            // Extract response.resposeXML for a xml format of response else response.responseText for a string.
            Ext.getCmp("yourGridId").body.unmask();
            alert('In success');
        },
        failure : function (response) {
            alert('In Failure');
            if (Ext.getCmp("yourGridId")) {
                Ext.getCmp("yourGridId").body.unmask();
            }
        }
    });
}

function StringToXML(oString) {
 //code for IE
 if (window.ActiveXObject) { 
 var oXML = new ActiveXObject("Microsoft.XMLDOM"); oXML.loadXML(oString);
 return oXML;
 }
 // code for Chrome, Safari, Firefox, Opera, etc. 
 else {
 return (new DOMParser()).parseFromString(oString, "text/xml");
 }
}
于 2013-04-16T15:16:53.057 に答える