Question

Je créé un composant Grille avec la configuration du magasin comme ceci:

    //Create the store
    config.store = new Ext.data.Store({
        restful: true,
        autoSave: false,
        batch: true,
        writer: new Ext.data.JsonWriter({
            encode: false
        }),
        reader: new Ext.data.JsonReader({
            totalProperty: 'total',
            root: 'data',
            fields: cfg.fields
        }),
        proxy: new Ext.data.HttpProxy({
            url:cfg.rest,
            listeners:{
                exception: {
                    fn: function(proxy, type, action, options, response, arg) {
                        this.fireEvent('exception', proxy, type, action, options, response, arg);
                    },
                    scope: this
                }
            }
        }),
        remoteSort: true,
        successProperty: 'success',
        baseParams: {
            start: 0,
            limit: cfg.pageSize || 15
        },
        autoLoad: true,
        listeners: {
            load: {
                fn: function() {
                    this.el.unmask();
                },
                scope: this
            },

            beforeload: {
                fn: function() {
                    this.el.mask("Working");
                },
                scope: this
            },
            save: {
                fn: function(store, batch, data) {
                    this.el.unmask();
                    this.fireEvent('save', store, batch, data);
                },
                scope: this
            },

            beforewrite: {
                fn: function(){
                    this.el.mask("Working...");
                },
                scope: this
            }

        }
    });

Remarque: Ignorer les fireEvents. Ce magasin est configuré dans une mesure partagée grille de composants.

Cependant, j'ai un problème ici: Quelles que soient les actions CRUD je l'ai fait, je viens toujours des demandes N au serveur qui est égal à N lignes I sélectionné. à savoir, si je sélectionne 10 lignes et frappé Supprimer, 10 demandes SUPPRIMER seront au serveur.

Par exemple, voici comment supprimer des enregistrements:

/**
 * Call this to delete selected items. No confirmation needed
 */
_deleteSelectedItems: function() {
    var selections = this.getSelectionModel().getSelections();
    if (selections.length > 0) {
        this.store.remove(selections);
    }
    this.store.save();
    this.store.reload();
},

Note:. Le champ d'application "this" est un composant grille

Alors, est-il supposé être comme ça? Ou mon problème de configuration? J'utilise Extjs 3.3.1, et selon la documentation de batch sous Ext.data.Store,

  

Si Store est RESTful, le DataProxy est également RESTful, et une transaction unique est généré pour chaque enregistrement.

Je souhaite que ce soit mon problème de configuration.

Note: J'ai essayé avec listful, encode, writeAllFields, encodeDelete dans Ext.data.JsonWriter ... sans espoir

Était-ce utile?

La solution

Vous avez lu les documents correctement; il est censé fonctionner de cette façon. Il est quelque chose à considérer chaque fois que le choix d'utiliser ou non les magasins RESTful sur vos grilles. Si vous allez les opérations par lots de besoin, les magasins RESTful ne sont pas vos amis. Désolé.

Autres conseils

Juste pour ceux qui pourraient se demander pourquoi ce n'est pas lot:

En ce qui concerne la documentation indiquée,

  

Si Store est RESTful, le DataProxy est également RESTful, et une transaction unique est généré pour chaque enregistrement.

Ce qui est vrai si vous regardez dans le code source de Ext.data.Store dans /src/data/Store.js

Ligne 309, dans @constructor

// If Store is RESTful, so too is the DataProxy
if (this.restful === true && this.proxy) {
    // When operating RESTfully, a unique transaction is generated for each record.
    // TODO might want to allow implemention of faux REST where batch is possible using RESTful routes only.
    this.batch = false;
    Ext.data.Api.restify(this.proxy);
}

Et voilà pourquoi je me rends compte lorsque j'utilise restful, mon batch ne sera jamais changé true.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top