Scala Play Framework和Angular JS - 在复制和混合概念方面付出了太多努力

时间:2013-09-13 15:56:01

标签: javascript ajax scala angularjs playframework-2.0

我尝试在playframework + scala + Angular JS上编写应用程序。 目的是创建一个Web应用程序,当JavaScript处于OFF状态或浏览器中为ON时,该应用程序可以正常工作。这是通常的要求,当一个人写一个公共网站(这应该对人们有好处,而谷歌会对其进行索引)

所以我最终得到了用JavaScript编写的 ~50%代码,有两个名为“controller”的文件夹 - 一个用于{{1}代码,一个用于Scala代码(因为AngularJS也使用控制器概念)。

此外,由于JS代码应该使用JS调用,我必须创建一个 scala控制器,返回Ajax,但不是{ {1}}回到客户的请求。而且......这一切我都不喜欢。这似乎太费劲了。

json模板方面,我应该考虑如何将htmlplayframework结合起来,将参数从一种语言传递到另一种语言。使用一些技巧,例如在处理JS时显示 ,显示 何时应该关闭。

这一切都使我的模板不那么难以理解,有一天,当我拥有庞大的代码库时,我可能会想出一个复制我的模板的解决方案(js templates + scala模板) - 在Scala关闭/开启时使用适当的模板。然后,JS代码的数量可能会增加到 60%。

然后我似乎要重复所有内容,例如 Google 以及 两个不同的应用。什么是常见的(仅)是我的数据本身在我的数据库中,我没有重复数据。但是......在那里我们可能会遇到与该数据格式不同的问题(并且很可能是基于json的[因为我不浪费处理器时间来进行表对象转换],而不是基于表的 - NoSQL ..然后我们再次像JS那样来到JS - 比如 MongoDB ),而JavaScript对Json非常有用,本机

然后提出疑问,为什么不将100%的JS用于简单之类的内容,例如:请求 - 响应形成页面布局。服务器端JS控制器可以形成我的模板 - 然后我不需要从一种语言切换到另一种语言,并且在这个意义上更高效。

问题: 你有什么建议吗?这方面的最佳做法?我不是那种想要最终使用JSJS作为一种语言用于服务器和客户端的人。但是,让我们谈谈生产力和业务需求。

有一个AnjularJS控制器的例子(不是我的),我需要写多少JS: https://github.com/tastejs/todomvc/tree/gh-pages/architecture-examples/angularjs/js

并且想象一下我必须保持PlayFramework控制器 - 对于HTML和AJAX调用,将scala / playframework模板中的东西与JavaScript混合。

6 个答案:

答案 0 :(得分:5)

我想分享最终种子(https://github.com/angyjoe/eventual)中使用的收据:

  1. 撰写您的HTML。这样做,请随意使用尽可能多的JavaScript框架和库(尽管种子是AngularJS)。

  2. 决定控制器遵循的Play模型。

  3. 为每个控制器(listcreateshow(id)update(id)delete(id)确定操作(仅限您需要的操作!) )。以Scala操作实现这些操作。

  4. 插入Play路线,将每个已实施的操作投放到客户端框架。

  5. 插入一个(且只有一个!)播放路线,将您的样式HTML提供给客户端框架。

  6. 将剩余的开发时间和精力花在客户端......

答案 1 :(得分:3)

现在这似乎可以帮助我:

https://github.com/nau/jscala

或者: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个模块的应用程序:

    客户端
  1. “网络” - nodejs应用 angularjs
  2. “服务器” play没有视图或服务器端模板的应用程序。但是我对Scala&amp;的 IntelliJ想法感到很失望。 SBT插件只是让我的笔记本电脑无故启动所有8个内核(人类发明量子计算机可能需要一些时间......我没有时间等待它。)
  3. 我现在所需要的只是简单的休息时间。 所以我可能最终拥有NODE JS服务器(用于处理MongoDB)和 Play 1.3 服务器( java )! (需要时将其连接到scala libs / logic)。毕竟我只需要REST层 - 无论如何它都不是火箭科学。因此,要创建一个简单的网站 - 我将使用 10%的Play和 90%的JS ,直到有额外的逻辑在scala上创建有意义使用强大的打字和功能方法,并在需要时与现有的java api连接。 即使我是java家伙(历史上),我发现在Java和现在的scala世界中,事情往往过于复杂。

    似乎:首先应考虑使用htmlcssnode / js创建内容,然后在创建基于网站的应用时进一步思考他需要什么。在逻辑需要时使用type-safety

    更新4:

    有趣的位

    1. https://github.com/greencatsoft/scalajs-angular
    2. https://github.com/greencatsoft/scalajs-angular-todomvc
    3. 相关问题:Scala-JS for real web project

答案 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客户端:

https://github.com/lashford/modern-web-template#master

http://typesafe.com/activator/template/modern-web-template