13

我试图在playframework++上编写一个应用scala程序Angular JS。目的是创建一个在浏览器中关闭或打开 JavaScript 时都能正常工作的 Web 应用程序。这是编写公共站点时的通常要求(这对人们和将其索引的谷歌应该有好处)

所以我最终得到了大约 50%的代码JavaScript,其中有两 (2) 个名为“控制器”的文件夹- 一个用于Scala代码,一个用于JS代码(因为 AngularJS 也使用控制器概念)。

此外,由于JS代码应该使用Ajax调用,我不得不创建一个返回的 scala-controller json,但不html返回客户端的请求。而且..这都是我不喜欢的。这似乎太费劲了。

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

这一切都让我的模板变得难以理解,有一天,当我拥有庞大的代码库时,我可能会想出一个解决方案来复制我的模板(js 模板 + scala 模板)——在JS关闭/打开时使用正确的模板。那么 JS 代码的数量可能会上升到60%。.

然后似乎我要复制所有内容,比如有两个不同的应用程序——用于Google和用于。常见的(仅)是我的数据本身在我的数据库中,我不必复制数据。但是..我们可能对数据的格式有不同的问题(并且很可能是基于 json 的 [因为我不会浪费处理器时间来进行表对象转换],但不是基于表的 - NoSQL .. 然后再次,我们像 DB 一样来到 JS - 像MongoDB一样),并且原生地JS与 Json 一起工作得很好。

然后问题,为什么不将 100%JS用于简单的事情,例如:request-response形成一个 pagelayouts。服务器端JS控制器可以形成我的模板——然后我不需要从一种语言切换到另一种语言,并且在这个意义上更加高效。

问: 您有什么建议吗?关于这个的最佳实践?我不是那种想最终使用NodeJS一种JavaScript语言来处理所有事情的人——服务器和客户端。但是让我们谈谈生产力和业务需求。

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

想象一下,我必须同时保留 PlayFramework 控制器——用于 HTML 和 AJAX 调用,将 scala/playframework 模板中的内容与 JavaScript 混合。

4

6 回答 6

5

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

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

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

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

  4. 插入一个 Play 路由以将每个已实现的操作提供给客户端框架。

  5. 插入一个(也是唯一一个!)播放路由,以将您的样式化 HTML 提供给客户端框架。

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

于 2013-11-17T03:54:05.750 回答
3

现在这似乎可以帮助我:

https://github.com/nau/jscala

或者这个:https ://github.com/lampepfl/scala-js

但这不是必须的答案。

更新:

对于不想在 JS 中跳得太深的 scala 开发人员,我看到的唯一一种方法是:

等到像 JScala 这样的解决方案或Scala-JS准备好使用(或贡献)以替代 CoffeScript inPlay2。在那一天之前,我们只需要忍受它。

在这里我们可以看到:https ://github.com/typesafehub/angular-seed-play

里面没有app/view目录的 play 应用。此外,“路由”文件几乎是空的——因为 Angular 在客户端关心它。所以我们不需要它们。

一种RIA方式。因此,如果有一天我们决定将这个应用程序提供给 Google(可用于谷歌搜索),我们会将视图路线放在那里。

更新 2:

现在我正在做一些PlayFramework项目。而且我发现仅使用简单的请求响应+ little JQueryJScala并没有那么糟糕。

我的观点是(我应该说这是众所周知的观点,但很容易忘记):您不确定您的应用程序是否会流行。您是否每秒有1K 用户。如果是 - 那么您(将)遇到性能问题,您可以通过在客户端移动应用程序的某些部分来改进(或在服务器端使用手工Akka Actors的轿跑车)。当您的想法可以放在您的模板/html上以立即看到结果时,所有人(像我一样)都应该考虑开发生产力的意义(这是最初创建的目的)。PlayFramework关于AngualrJS那些人(甚至是我 :) )的噪音太大了,他们不假思索地跳到那里。

200k of json无论您仅加载文件还是200k + 5k html从服务器端加载文件(比较请求响应与休息 - json)是否有意义/关键?可能不是。对于网站/应用程序stackoverflow和许多其他人来说,这并不重要。开发生产力很重要。

“点”,很重要。“跟随亮点并继续(C)” :)

更新3:(基于实际需求的演变)

现在我有一个包含 2 个模块的应用程序:

  1. “web” -客户端nodejs带有angularjs的应用程序
  2. play没有视图也没有服务器端模板的“服务器”应用程序。但令我失望的是,在带有 Scala 和 SBT 插件的 IntelliJ 想法中,它只会让我的笔记本电脑无缘无故地启动所有 8 个内核(人类发明量子计算机可能需要一些时间。我没有时间等待它) .

我现在需要的只是简单的休息。所以我最终可能会拥有 NODE JS 服务器(用于使用 MongoDB 之类的东西)和Play 1.3服务器(java)!(在需要时将其连接到 scala 库/逻辑)。毕竟我只需要 REST 层 - 无论如何它都不是火箭科学。因此,要创建一个简单的网站 - 我将使用10%的 Play 和90% 的 JS,直到有额外的逻辑可以在 scala 上创建,使用强类型和功能方法,并在我需要时与现有的 java api 连接它。即使我是 java 人(从历史上看),我发现在 java 和现在的 scala 世界中,事情对我来说过于复杂。

似乎:应该首先考虑使用html,cssnode/创建东西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
于 2013-09-13T17:36:33.910 回答
3

看起来角度对于您的情况来说太多了。也许您可以在 js 方面坚持使用更简单的 Ajax,例如 jQuery,并使用 Rest 端点作为播放路由来将 json 提供给您的页面。

于 2013-09-14T00:00:54.977 回答
3

你看过这篇博文 - AngularJS 和 Play Framework吗?

于 2013-09-22T07:28:27.160 回答
2

我刚刚做了一个示例项目,展示了如何使用 Scala.js 编写 AngularJS/Play 应用程序:

https://github.com/greencatsoft/scalajs-angular-todomvc

应该有一些粗糙的边缘,但我相信能够用 Scala 编写所有东西(包括 AngularJS 部分)会吸引一些人。

于 2014-09-10T12:35:58.240 回答
0

这是一个很好的混合项目示例(angularjs 玩 mongodb 和 scala)和很棒的教程,它展示了如何构建一个现代 Web 应用程序,包括一个使用 CoffeeScript 编写的 AngularJS 构建的客户端 JavaScript 应用程序,从 Play 框架和使用 Reactive Mongo 的文档持久性是 MongoDB 的非阻塞 Scala 客户端:

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

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

于 2015-04-23T09:56:35.803 回答