2012-03-15 51 views
0

我想創建簡單的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(); 
+0

如果您遇到此問題,並且您使用的是Ext JS 5或6,請注意您需要調用'erase'方法而不是'destroy'方法來使代理向服務器發送請求。 – 2017-03-24 10:12:11

回答

5

想必你的身份證字段在創建記錄時在服務器端分配。正確?首先嚐試在模型中指定idProperty:'Id'。默認值是'id',但我認爲這些是區分大小寫的。

使用idProperty ExtJs將記錄識別爲「髒」並且需要在服務器端進行更新。

+0

感謝區分大小寫'id'是棘手的部分:) – Glaxalg 2012-03-15 17:08:01

3

的問題是你的代理需要在一個專門的REST類型:

proxy: { 
     type: 'rest', 

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.proxy.Rest

此外,你可能會能夠使用buildURL方法來代替你自己的updateAPI ...方法。

+0

將'Id'更改爲'id'後,store開始發送POST而不是DELETE,並將代理類型更改爲'rest'解決了此問題。 – Glaxalg 2012-03-15 17:09:44