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 derdestroy
Methode, um den proxy senden Sie eine Anfrage an den server. Das änderte sich seit der version 5.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vermutlich dein Id-Feld zugewiesen, auf dem server Ende, als der Datensatz erstellt wird. Richtig? Versuchen Sie zunächst angeben, idProperty: 'Id' in das Modell. Standardwert für diese Einstellung ist die 'id', aber ich denke, diese sind groß-und Kleinschreibung.
Mit idProperty ExtJs erkennt records als 'dirty' und erforderlich, um auf dem server aktualisiert werden Ende.
Das Problem ist dein proxy muss eine spezialisierte REST-Art:
http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Daten.proxy.Rest
Außerdem werden Sie wahrscheinlich in der Lage sein zu verwenden, die buildURL Methode zu ersetzen, die Ihrem eigenen updateAPI... - Methode.