使用Clojure创建'富'网络应用程序

11
我在构建一个基于Clojure的Web应用程序时遇到了一些困难。这是一个简单的CRUD应用程序,我开始探索Clojure Web生态系统。我正在尝试不同的库,例如Hiccup, Enlive, CompojureNoir(虽然Noir似乎即将被淘汰)。
我的问题实际上有两个。首先是在构建clojure web应用程序时缺乏明显的惯例。其次,我需要一些关于创建“丰富”HTML组件的提示。
我喜欢Clojure的方式之一是轻松地使不同的库协同工作。替换enlive与hiccup以及反过来都不是什么大问题。每个库都扮演着单一而简单的角色。这与像JSF这样的复杂框架非常不同。
但问题在于:这种极大的自由让我感到有点迷茫。在JSF中,我知道每个东西都有其所在的位置。我使用Spring来整合所有组件,使用Spring-Security来处理所有会话相关的事务。组件库使我免于应对html、javascript和ajax问题的压力。

特别是前面提到的组件库是我在Clojure中所缺少的。我发现自己需要实现一些功能,如具有交替行颜色、分页、列排序、增量过滤等功能的数据表。而当涉及到ajax时,我还需要考虑如何同步此类组件的浏览器和服务器状态。我在网络上找不到任何成熟的答案。

框架的优点在于:一旦你理解了规则和限制,就可以构建你的应用程序并专注于业务规则。技术基础设施已经处理好了,不应该成为干扰。

对于Clojure世界,有什么建议吗?ClojureScript One是一个解决方案吗?我还没有研究过它。是否有任何组件库提供类似RichFaces datatable的功能?是否有处理ajax的首选方式?



这个论坛不是用来讨论的,而是用来解决特定问题的。Clojurescript 会为浏览器端生成 JavaScript 代码。对于后端,Noir 已经被 Compojure 取代。 - octopusgrabbus
我知道这个论坛不适合讨论。但我并不期望只有一个“正确”的答案。但我会删除最后那句话。正如我所说,我并没有真正研究过“clojurescript One”。我知道什么是clojurescript。“Clojurescript One”似乎对我来说是一个将所有东西包装起来的起点。但我可能错了,它只是一个用于开始使用clojurescript的教程应用程序。 - nansen
1个回答

4

我能给你的只有一些指南:

  • 客户端和服务器之间使用JSON或EDF交换消息
  • 将GUI代码与客户端状态管理代码分离
  • 将客户端状态管理代码放在交叉点上,以便您可以在浏览器外进行测试
  • 尽可能使客户端GUI代码独立于特定库,选择具有活跃社区和最少依赖的库

交叉编译是指声明你的代码路径被 cljsbuild(lein 插件)从 Clojure 源代码复制到 Clojurescript 源代码中,这可以通过在 project.clj 文件中添加一行来完成。我使用这种方式使你的代码部分成为纯 Clojure 代码,完全不依赖于 Clojurescript,这使得你可以使用普通的 Clojure 环境进行测试。 - Hendekagon
1
我非常想看一下在 GitHub 上有源代码的完整示例。可行吗? - Jacek Laskowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接