Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Extjs与HAL集成_Javascript_Rest_Extjs_Backbone.js_Spring Data Rest - Fatal编程技术网

Javascript 将Extjs与HAL集成

Javascript 将Extjs与HAL集成,javascript,rest,extjs,backbone.js,spring-data-rest,Javascript,Rest,Extjs,Backbone.js,Spring Data Rest,如何将输出HAL的Spring DATA REST与ExtJS(v4.1)客户端绑定,ExtJS不支持HAL,但如何将Hyperagent.js或任何支持HAL的js库与ExtJS数据模型集成,通过HAL将商店与服务器链接 这样的架构有哪些优点和缺点?这是一个非常有趣的问题。关于如何将ExtJs连接到后端的信息不多。当我开始为ajax代理开发定制后端时,我没有找到我想要的信息。根据我有限的经验,我只能写一个肯定有偏见的答案,我希望你们能从不同的角度得到其他答案 我一开始的想法是编写一个通用的、符

如何将输出HAL的Spring DATA REST与ExtJS(v4.1)客户端绑定,ExtJS不支持HAL,但如何将Hyperagent.js或任何支持HAL的js库与ExtJS数据模型集成,通过HAL将商店与服务器链接


这样的架构有哪些优点和缺点?

这是一个非常有趣的问题。关于如何将ExtJs连接到后端的信息不多。当我开始为ajax代理开发定制后端时,我没有找到我想要的信息。根据我有限的经验,我只能写一个肯定有偏见的答案,我希望你们能从不同的角度得到其他答案

我一开始的想法是编写一个通用的、符合标准的、与客户端无关的RESTful API,该API按原样公开数据库中的表。最后,我得到了一个高度特定于ExtJs的后端,它实现了许多我认为应该属于前端的特性

ExtJs对后端施加了什么 ExtJs在视图和存储之间具有严格的关系。视图绑定到直接绑定到后端的存储。这要求后端必须提供数据,因为数据将显示在网格中。真正遗漏的(extjs5在某种程度上减轻了这一点)是使用另一个存储的数据创建存储的能力。这导致有义务以与最终视图相关的定制方式公开数据(我们已经放松了API和应用程序之间的关注点分离)

当您想使用分页、远程过滤或排序等功能时,这一点就更进一步了。如果您在某个时候拥有大量数据,那么由于性能问题,您将不得不这样做。ExtJs发送分页参数的方式(默认情况下是启用这种方式)、排序和筛选对我来说很独特,我认为这需要您在此时调整后端以适应ExtJs。如果您经常使用过滤器,您甚至需要在后端配置它们,因为过滤器属性(如以vs contains开头和区分大小写)很不幸地无法到达服务器。再一次,一个表示元素更多地将自己引入后端

ExtJS4对关联的支持有限(并且与版本5不兼容)。ExtJs不支持REST的高级功能,比如@Jaimie链接的帖子中解释的功能。ExtJs有一种简单的REST方法,每个表都有自己的端点。有一种方法可以从树状数据结构中的链接表发送数据,我无法让它工作,但如果您实现了这一点,您将在后端使用另一个特定于ExtJs的功能

我目前的做法 有了这些来自ExtJs方面的需求,我觉得不得不写一些真正特定于ExtJs的东西。一开始我试图避免的是我的后台力量:专一性

我有一个类,它为任何mysql表实现crud操作、分页、过滤和排序,所有这些都通过身份验证进行保护。它做的正是ExtJs期望它做的

我可以为表创建一个子类,以允许更细粒度的控制:

  • 使用ACL的授权
  • 提供加入或意见
  • 更新或删除前的扩展验证
  • 自定义过滤器
  • 通过websocket发送特殊操作通知
  • 将任何数据公开为表(例如,目录中的文件列表)
结论 正如您所看到的,后端具有非常强大的功能,远远不是一个单纯的数据提供者


这并不是对您关于如何集成HAL REST api的问题的回答,但它以某种方式回答了正反两方面的问题:ExtJs在其后端有如此特殊的要求,如果不实现它们,您将失去太多的功能。修改ExtJs连接到服务器的方式可能是一个选项,但我不知道您必须在多大程度上重写代码。这可能需要一项重要的投资。

我前段时间对此进行了调查,在sencha论坛上发现了这一点:当时我编写了一个自定义rest代理,扩展了ext rest代理,但使用了hateoas原则。老实说,这是一个彻底的痛苦。在我的下一个项目中,我只是使用了rest代理,因为ext就是这么理解的。