我尝试在playframework
+ scala
+ Angular JS
上编写应用程序。
目的是创建一个Web应用程序,当JavaScript处于OFF状态或浏览器中为ON时,该应用程序可以正常工作。这是通常的要求,当一个人写一个公共网站(这应该对人们有好处,而谷歌会对其进行索引)
所以我最终得到了用JavaScript
编写的 ~50%代码,有两个名为“controller”的文件夹 - 一个用于{{1}代码,一个用于Scala
代码(因为AngularJS也使用控制器概念)。
此外,由于JS
代码应该使用JS
调用,我必须创建一个 scala控制器,返回Ajax
,但不是{ {1}}回到客户的请求。而且......这一切我都不喜欢。这似乎太费劲了。
在json
模板方面,我应该考虑如何将html
与playframework
结合起来,将参数从一种语言传递到另一种语言。使用一些技巧,例如在处理JS时显示 ,显示 何时应该关闭。
这一切都使我的模板不那么难以理解,有一天,当我拥有庞大的代码库时,我可能会想出一个复制我的模板的解决方案(js templates + scala模板) - 在Scala
关闭/开启时使用适当的模板。然后,JS代码的数量可能会增加到 60%。。
然后我似乎要重复所有内容,例如 Google 以及 两个不同的应用人。什么是常见的(仅)是我的数据本身在我的数据库中,我没有重复数据。但是......在那里我们可能会遇到与该数据格式不同的问题(并且很可能是基于json的[因为我不浪费处理器时间来进行表对象转换],而不是基于表的 - NoSQL ..然后我们再次像JS那样来到JS - 比如 MongoDB ),而JavaScript
对Json非常有用,本机。
然后提出疑问,为什么不将100%的JS
用于简单之类的内容,例如:请求 - 响应,形成页面 ,布局。服务器端JS
控制器可以形成我的模板 - 然后我不需要从一种语言切换到另一种语言,并且在这个意义上更高效。
问题:
你有什么建议吗?这方面的最佳做法?我不是那种想要最终使用JS
将JS
作为一种语言用于服务器和客户端的人。但是,让我们谈谈生产力和业务需求。
有一个AnjularJS控制器的例子(不是我的),我需要写多少JS: https://github.com/tastejs/todomvc/tree/gh-pages/architecture-examples/angularjs/js
并且想象一下我必须保持PlayFramework控制器 - 对于HTML和AJAX调用,将scala / playframework模板中的东西与JavaScript混合。
答案 0 :(得分:5)
我想分享最终种子(https://github.com/angyjoe/eventual)中使用的收据:
撰写您的HTML。这样做,请随意使用尽可能多的JavaScript框架和库(尽管种子是AngularJS)。
决定控制器遵循的Play模型。
为每个控制器(list
,create
,show(id)
,update(id)
,delete(id)
确定操作(仅限您需要的操作!) )。以Scala操作实现这些操作。
插入Play路线,将每个已实施的操作投放到客户端框架。
插入一个(且只有一个!)播放路线,将您的样式HTML提供给客户端框架。
将剩余的开发时间和精力花在客户端......
答案 1 :(得分:3)
现在这似乎可以帮助我:
或者:https://github.com/lampepfl/scala-js
但这不是一个必要的答案。
<强>更新强>
对于那些不想在JS中跳得太深的scala开发人员,我看到的唯一方法是:
等到JScala或Scala-JS
等解决方案准备好使用(或贡献)以替换CoffeScript in
Play2。在那之前,我们必须忍受这一点。
在这里,我们可以看到:https://github.com/typesafehub/angular-seed-play
播放应用中没有 app / view 目录。 Aslo“routes”文件几乎是空的 - 因为Angular在客户端关心它。所以我们不需要它们。
有种RIA方式。因此,如果有一天我们决定让这个应用程序可用于谷歌(可以转让),我们将把查看&amp;那里有路线。
更新2:
现在我正在开展一些PlayFramework
项目。我发现使用只是简单的请求 - 响应 +小 JQuery 或 JScala 并不是那么糟糕。
我的观点是(众所周知,我应该说,但很容易忘记):你不确定你的应用程序是否会受欢迎。您是否每秒 1K用户。如果是 - 那么你(WILL)会遇到性能问题,你可以通过在客户端转移部分应用程序(或在服务器端使用handved Akka Actors 的coupe)来提高性能。所有人(像我一样)都应该考虑开发效率(这是最初为PlayFramework
创建的)这一点,当您的想法可以放在您的模板/ html上以立即查看结果时。 AngualrJS
有很多噪音让人们(甚至是我)失去了思绪,不假思索地跳到那里。
从服务器端加载200k of json
文件或200k + 5k html
(比较请求 - 响应与休息 - json)是否有意义/关键?可能不是。对于像stackoverflow
这样的网站/应用以及许多其他网站/应用来说并不重要。发展生产力很重要。
“重点”,这很重要。 “按照亮点继续进行(C)”:)
更新3 :(基于实际需求的演变)
现在我有一个包含2个模块的应用程序:
nodejs
应用 angularjs play
没有视图或服务器端模板的应用程序。但是我对Scala&amp;的 IntelliJ想法感到很失望。 SBT插件只是让我的笔记本电脑无故启动所有8个内核(人类发明量子计算机可能需要一些时间......我没有时间等待它。)我现在所需要的只是简单的休息时间。 所以我可能最终拥有NODE JS服务器(用于处理MongoDB)和 Play 1.3 服务器( java )! (需要时将其连接到scala libs / logic)。毕竟我只需要REST层 - 无论如何它都不是火箭科学。因此,要创建一个简单的网站 - 我将使用 10%的Play和 90%的JS ,直到有额外的逻辑在scala上创建有意义使用强大的打字和功能方法,并在需要时与现有的java api连接。 即使我是java家伙(历史上),我发现在Java和现在的scala世界中,事情往往过于复杂。
似乎:首先应考虑使用html
,css
和node
/ js
创建内容,然后在创建基于网站的应用时进一步思考他需要什么。在逻辑需要时使用type-safety
。
更新4:
有趣的位
答案 2 :(得分:3)
看起来角度太大了你的情况。也许你可以在js方面坚持使用更简单的Ajax,比如jQuery,并使用Rest端点作为播放路径将json提供给你的页面。
答案 3 :(得分:3)
您是否看过此博客帖子 - AngularJS and Play Framework?
答案 4 :(得分:2)
我刚刚制作了一个示例项目,展示了如何使用Scala.js编写AngularJS / Play应用程序:
https://github.com/greencatsoft/scalajs-angular-todomvc
应该有一些粗糙的边缘,但我相信能够在Scala中编写所有内容(包括AngularJS部分)可以吸引一些人。
答案 5 :(得分:0)
下面是混合(angularjs玩的MongoDB和Scala)与伟大的教程的一个好项目为例,它显示了如何构建一个现代化的Web应用程序,包括客户端的JavaScript的应用程序中使用AngularJS在CoffeeScript中写道建成,从服务Play Framework和使用文档持久性与Reactive Mongo一起使用MongoDB的非阻塞Scala客户端: