ユーザーとユーザーの役割を管理する単純なExtJsアプリケーションを作成しようとしています。一連のRESTサービスはバックエンドでこの機能を提供します。 ユーザーに新しい役割を割り当てると、適切なデータストアがPOST(作成)要求をサービスに送信します。しかし、ユーザーから既存のロールを削除すると、DELETE要求をサービスに送信せずにローカルストアからのみ削除されます。ここ は私のコードです:ExtJSストア/プロキシがサーバーに削除メソッドを送信しない
モデル:プロキシと
Ext.define('UserRole', {
extend: 'Ext.data.Model',
fields: [
{ name: 'Id', mapping: "Id" },
{ name: 'RoleId', mapping: "RoleId" },
{ name: 'UserId', mapping: "UserId" }
]
});
ストア:選択したチェックボックスに基づいて
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);
}
}
});
方法のUserRoleストア
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();
Ext JS 5または6を使用している場合は、プロキシがサーバーに要求を送信するために、 'destroy'メソッドの代わりに' erase'メソッドを呼び出す必要があることに注意してください。これはバージョン5以降に変更されました。 –