在 Extjs 5 中,当代理类型为 rest 时,erase() 无法与 destroy api 相关联

In Extjs5, erase() can't relate to destory api when the proxy type is rest

这是我的 viewController:

onRestDeleteClick: 函数(){

var ouType = Ext.create('MyApp.model.OuType',
 {
  id: 49,
  ouTypeName: 'Lenlee', 
  entityName: 'Lenlee'
 });
 ouType.erase();
}

数据库中存在id为49的模型

这是 OuType 模型:

Ext.define('MyApp.model.OuType', {
  extend: 'Ext.data.Model',
  requires: [
  'Ext.data.field.Field'
],

fields: [
  {
   name:'id'
  },
  {
   name: 'ouTypeName'
  },
  {
   name: 'entityName'
  }
],
proxy:{
  type: 'rest',
  api: {
     read: 'role/read',
     update: 'role/update',
     create: 'role/create',
     destory: 'role/destory'
   }
 }
});

这是我的服务器class:

 @RequestMapping("/role")
 @Controller("sysRoleContro")
 public class SysRoleController {
     …………
     …………
      @RequestMapping(value="/destory/{id}")
      public void destoryOuType(HttpServletRequest request, 
        HttpServletResponse response, @PathVariable("id") Long id){ 

          log.info("destory");
          ouTypeRepository.delete(id);
          log.info("end");
     }
 ………
 ……

}

现在当我点击删除按钮时,请求 url 是:http://localhost:7080/MyApp.model.OuType/49 404 Not Found。

预期的 url 是 http://localhost:7080/CSQMS/role/destory/49

如何删除模型?

Rest 代理的特殊之处在于它不会像您在 api 中设置的那样对 url 进行 CRUD 操作,而是对 HTTP 动词:GET、POST、PUT、DELETE 等进行 CRUD 操作。所以api 配置很可能被忽略。以这种方式配置代理:

proxy:{
    type:'rest',
    url:'/CSQMS/role'
}

如果您的服务器期望 CRUD 操作动词是 URL 的一部分,您可能需要不同的代理或者您需要实施 buildUrl 方法。

我想说我太粗心了,我应该写'destroy'而不是'destory'。我的天啊