ExtJS-store/Ihr proxy nicht, senden Sie delete-Methode zum server

Ich versuche zu schaffen, einfach ExtJs-Anwendung, die Verwaltung von Benutzern und Benutzer-Rollen. Reihe von REST-services bieten diese Funktionalität auf back-end.
Wenn ich das zuweisen einer neuen Rolle zu einem Benutzer, entsprechende Daten zu speichern, sendet die POST (create) - Anforderungen an den service. Allerdings, wenn ich entfernen Sie vorhandene Rolle einem Benutzer entfernt wird, nur vom speichern, lokal, ohne E-DELETE-Anfrage an den service.
Hier ist mein code:

Modell:

Ext.define('UserRole', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'Id', mapping: "Id" },
        { name: 'RoleId', mapping: "RoleId" },
        { name: 'UserId', mapping: "UserId" }
    ]
});

Store Mit proxy:

Ext.define('UserRoleStore', {
    extend: 'Ext.data.Store',
    model: 'UserRole',

    autoload: false,

    proxy: {

        type: 'ajax',
        reader: {
            type: 'json',
            root: 'd.results'
        },        
        api: {
            read: '/accessmanager.svc/Users(\'{userid}\')/Roles?$format=json',
            create: '/accessmanager.svc/UserRoles?$format=json',
            update: '/accessmanager.svc/UserRoles?$format=json',
            destroy: '/accessmanager.svc/UserRoles?$format=json'
        },

        updateApiUrlWithUserId: function (userId) {
            this.api.read = this.api.read.replace('{userid}', userId);
        }

    }
});

Methode, die auf der Grundlage der ausgewählten Checkboxen aktualisiert die UserRole store

    var chekboxes = Ext.ComponentQuery.query('userdetails #roleslist')[0];

    var selectedUserId = this.selectedUserId;
    var selectedUserRoleStore = this.selectedUserRoleStore;
    Ext.each(chekboxes.items.items, function (cb) {
        var exists = false;            
        Ext.each(selectedUserRoleStore.data.items, function (cs) {
            if (cs.data.RoleId === cb.inputValue) {
                exists = true;                    
            }                
        });
        if (cb.getValue() && !exists) {
            var newRole = Ext.create('UserRole', { RoleId: cb.inputValue, UserId: selectedUserId });
            selectedUserRoleStore.add(newRole);

        } else if (exists && !cb.getValue()) {
            //delete existing role
            var record = selectedUserRoleStore.findRecord("RoleId", cb.inputValue);
            selectedUserRoleStore.remove(record);                
        }
    });
    selectedUserRoleStore.sync();
  • Wenn Sie kommen zu dieser Frage, und Sie sind mit Ext JS 5 oder 6, beachten Sie, dass Sie benötigen, rufen Sie die erase - Methode anstelle der destroy Methode, um den proxy senden Sie eine Anfrage an den server. Das änderte sich seit der version 5.
InformationsquelleAutor Glaxalg | 2012-03-15
Schreibe einen Kommentar