1

グリッドの削除ボタンを押すと、その行はグリッドから消えますが、グリッドが再ロードされると、その行が再び表示されます。多くのコマンドを試しましたが、結果はありませんでした。助けてください!前もって感謝します。

これは、グリッドを作成する関数です。

// create the data store
var store = new Ext.data.Store({
    proxy: new Ext.ux.data.PagingMemoryProxy(myData),
    remoteSort:true,
    sortInfo: {field:'del', direction:'DESC'},

    reader: new Ext.data.ArrayReader({
        fields: [
           {name: 'id'},
           {name: 'name'},
           {name: 'category'},
           {name: 'price', type: 'float'},
           {name: 'active', type: 'int'},
           {name: 'actions', type:'text'}
        ]
    })
});

そして、これが削除機能です。

        buttons: [{
        text: 'Add',
        iconCls: 'silk-add',
        handler: this.onAdd

    }, '-', {
        text: 'Delete',
        iconCls: 'silk-delete',
                   handler: function(sm, rowIdx,r){

            var s = grid.getSelectionModel().getSelections();
            for(var i = 0, r; r = s[i]; i++){

              // store.remove(r);
               var index = store.data.indexOf(r);
               if(index > -1){
                r.join(null);
                store.data.removeAt(index);

            }
                store.modified.remove(r);

            if(index > -1){
                store.fireEvent('remove', store, r, index);     
            } 
                store.destroyRecord(store, r, index);
            }

           store.reload();
        },
    }]
4

2 に答える 2

4

grid.store.reload()メソッドを使用してグリッドをリロードすると、ストアはソースからデータをリロードするため、この場合、ローカルデータ(配列またはjson文字列?)を使用しているように見えます。そうです、ストアからレコードを削除していますが、reloadを呼び出すことで、それらのレコードを再挿入しています。最善の策は、オブジェクト「mydata」から値を削除してから、reloadを呼び出すということです。それはあなたのために記録を取り除くはずです。

于 2010-11-29T16:48:01.417 に答える
0

私は解決策を見つけました、例のためにmydataから削除する方法:myData.splice(1,1);

于 2010-11-30T00:12:26.947 に答える