用于构建单页面应用程序的JavaScript框架

Chr*_*ill 101 javascript singlepage

我的目标是将现有Web应用程序迁移到RESTful 单页面应用程序(SPA).目前,我正在评估几个Javascript Web应用程序框架.


我的要求如下:

  • RESTful数据层(如ember-data)
  • MV* - 结构
  • 动态路线
  • 测试支持
  • 按惯例编码
  • SEO支持
  • 浏览器的历史记录,支持
  • 好的(API-)文档
  • 生产就绪
  • 生活社区

骨干

当前的应用程序正在使用backbone.js.总的来说,这backbone.js是一个很好的项目,但是我缺少明确定义的结构,这些结构决定了必须发生的事情以及必须如何实现.在更大的团队中工作,改变开发人员会导致某种非结构化代码,难以维护和难以理解.这就是为什么我现在正在寻找一个已经定义了所有这些东西的框架.

我调查ember.js了最后几天.这种方法对我来说似乎很有希望.但不幸的是,代码几乎每天都在变化.所以,我不会称之为生产就绪.而且,不幸的是,我们不能等待它成为1.0版本.但我真的很喜欢这个框架背后的想法.

Angular.js是一个广泛传播的框架,由谷歌维护.但我无法熟悉角度.对我来说,结构似乎有点不清楚,对框架的每个部分的总体职责缺失了解释,并且实现感觉迂回.只是为了说明这一点:这只是我的个人印象,可能是基于缺少的知识.

蝙蝠侠流星

据我所知,两个框架也需要一个服务器部分.因为我们只想要一个RESTful后端 - 无论使用什么语言,技术或软件,这都不是我们想要的.此外,后端API已经存在(RoR).

Knockout,CanJSSpine

我没有深入研究这三位候选人.也许这将是我的下一步.


所以现在我的问题是:

  • 我错过了任何优秀的SPA框架吗?
  • 你会建议/推荐什么框架?
  • 你会避免任何提到的框架吗?
  • 您在大型SP应用程序中的经验是什么?

PS:我想推荐一个伟大的博文由史蒂芬·安德森(从Knockout.js核心开发人员)约(自2012年)的"JS王座" -会议和一般的JavaScript框架.

PS:是的,我知道已经有一些问题了.但是,由于SPA的发展如此迅速和快速,因此大多数已经过时了.

Nat*_*ate 81

我最近不得不决定一个项目的JavaScript SPA框架.

  • 很早就看到了Ember并且和你有类似的想法 - 我真的很喜欢它但感觉现在还为时尚早......我读过的教程中有一半与当前版本无关,因为最近有些东西改变了模板的工作方式.

  • 骨干

    Backbone是我们认真研究的第一个框架.我不确定我理解为什么你认为它没有"定义明确的结构"?Backbone非常清楚如何划分Model和View代码.也许你的意思是没有某种应用模板?无论如何,Backbone似乎真的专注于模型/ REST绑定部分,但并没有真正为视图绑定规定任何东西.如果模型绑定对您很重要并且您正在使用Rails,那么执行此操作应该是轻而易举的.不幸的是,我的应用程序的Web服务并没有真正匹配,我不得不写我自己.sync.parse一切方法.Model和View代码的分离很不错,但是由于我们必须从头开始编写所有绑定,所以不值得.

  • 昏死

    淘汰赛就像尹到骨干的杨.Backbone专注于模型,Knockout是一个MVVM框架,专注于View.它具有observableJavaScript对象属性的包装器,并使用data-bind属性将属性绑定到HTML.最后我们选择了Knockout,因为视图绑定主要是我们的应用程序所需要的.(...加上其他人,如后面所讨论的......)如果你喜欢Knockout的视图绑定和Backbone的模型绑定,那么还有KnockBack结合了两个框架.

  • 在Knockout之后看了这个 - 不幸的是我们都对Knockout如何看待绑定感到非常满意.它似乎比Knockout更复杂,更难进入.并且它使用一堆自定义HTML属性来进行绑定,我不确定我喜欢......我可能会在稍后再看看Angular,因为我遇到了很多真正喜欢这个框架的人 - 也许我们只是为这个项目看了太晚了.

  • 蝙蝠侠,流星,CanJS,脊柱

    没有真正仔细看过这些.虽然我知道Spine是一个类似于Backbone的框架,具有显式的Controller对象,并且是用CoffeeScript编写的.

  • 后记

    正如我所提到的,我们最终使用了Knockout,因为对于我们的项目,关注视图绑定更为重要.我们最终还使用了RequireJS进行模块化,十字路口Hasher来处理路由和历史,Jasmine用于测试,以及JQuery,Twitter BootstrapUnderscore.js(可能还有更多我暂时忘记的库).

    Javascript应用程序开发更像是Java生态系统,而不是Rails生态系统.Rails为每个应用程序(Rails框架)提供了一个可靠的核心,社区提供了很多自定义(gems).Java提供了一种语言.然后您可以选择Java EE或Spring或Play或Struts或Tapestry.并选择JDBC或Hibernate或TopLink或Ibatis与数据库通信.然后你可以使用Ant或Maven或Gradle来构建它.并选择Tomcat或码头或JBoss的或WebLogin在运行它.所以这是在选择你所需要的更多的强调和什么一起工作不是选择使用框架.


Uni*_*ist 8

自从我们开始开发具有众多SPA的云服务项目以来已经过去了一年,因此这是一个重大的决定,用于我们的UI的javascript框架可以满足我们的RESTful架构需求.经过大量的研究,我们最终使用了Dojo框架.

你会喜欢的主要特点:

  1. 受过良好教育的社区和一个提出完美设计模式的团队.伟大的约定和模块化/面向对象的架构.用CrossBrowser编程态度:)
  2. MV*结构.使用外部.htm模板构建UI小部件并进行制作,将所有javascript和模板构建为单个,缩小和小.js
  3. 构建具有继承的类.属性设置器,很多功能工具.
  4. 发布/订阅机制(在dojo中命名主题)
  5. 许多UI控件,从验证表单控件,对话框/工具提示到功能强大,高度可定制(但轻量级)的图表和数据网格解决方案.
  6. 一个很好的单元测试系统,名为DOH.它还有一个机器人来重现鼠标/键盘动作.
  7. 一个名为NodeList的查询工具(如JQuery),具有所有jquery功能,甚至包含很多插件.
  8. 好的但不那么完整的部分.它有一个JsonRest模块用于您的REST服务.它是一个方便的工具,但它缺乏很多功能.

为了克服这些问题,我们开发了一个AJAX轮询器,错误处理和通用,加载和通知解决方案.我们使用dojo框架约定和结构非常容易地完成了它.如果你不想这样做,也许你必须为这部分使用另一个框架.

看看网络上的优秀SPA,您会发现所有这些都是自定义的并使用多个框架.但我们单独使用Dojo的经历太棒了.因此我建议你不要考虑任何其他框架,因为所有这些框架都不完整.但最终你还有另一种选择(我不推荐,也没有详细信息).通过自动生成UI和javascript,使用能够构建SPA的JAVA框架.