我的目标是将现有的Web应用程序迁移到RESTful single page application(SPA)。 目前,我正在评估几个Javascript Web应用程序框架。
我的要求如下:
当前的应用程序正在使用backbone.js
。总体而言,backbone.js
是一个不错的项目,但我缺少明确定义的结构,这些结构决定了必须发生的事情以及必须如何实施。在更大的团队中工作,不断变化的开发人员会导致某种非结构化代码,难以维护和难以理解。这就是为什么我现在正在寻找一个已经定义了所有这些东西的框架。
我在最后几天看了ember.js
。这种方法对我来说似乎很有希望。但不幸的是,代码几乎每天都在变化。所以,我不称之为生产就绪。不幸的是,我们不能等待它成为1.0版本。但我真的很喜欢这个框架背后的想法。
Angular.js
也是一个广泛传播的框架,由Google维护。但我无法熟悉角度。对我来说,结构似乎有点不清楚,对框架的每个部分的总体职责缺失了解释,并且实现感觉迂回。
只是为了说明这一点:这只是我个人的印象,可能是基于缺少的知识。
据我所知,两个框架也需要一个服务器部分。因为我们只想要一个RESTful后端 - 无论使用什么语言,技术或软件,这都不是我们想要的。此外,后端API已经存在(RoR)。
我没有深入研究这三位候选人。也许这将是我的下一步。
现在我的问题是:
PS:我想推荐Steven Anderson(来自Knockout.js的核心开发人员)的great blogpost关于" JS" -conference的王座(来自2012年)和javascript框架一般。
PS:是的,我知道已经有一些问题了。但是,由于SPA的发展如此迅速和快速,其中大部分都已经过时了。答案 0 :(得分:81)
我最近还必须决定项目的JavaScript SPA框架。
很早就看到了Ember并且和你有类似的想法 - 我真的很喜欢它但感觉现在还为时尚早......我读过的一半教程与当前版本不兼容,因为最近有些事情在模板的运作方式上发生了变化。
Backbone是我们认真研究的第一个框架。我不确定我理解为什么你认为它没有“定义明确的结构”? Backbone非常清楚如何划分Model和View代码。也许你的意思是没有某种应用模板?无论如何,Backbone似乎真的专注于模型/ REST绑定部分,但并没有真正为视图绑定规定任何东西。如果模型绑定对您很重要并且您正在使用Rails,那么执行此操作应该是轻而易举的。不幸的是,我的应用程序的Web服务并没有真正匹配,我必须为所有内容编写自己的.sync
和.parse
方法。 Model和View代码的分离很不错,但是因为我们必须从头开始编写所有绑定,所以不值得。
淘汰赛就像尹到骨干的杨。 Backbone专注于模型,Knockout是一个MVVM框架,专注于View。它具有JavaScript对象属性的observable
包装器,并使用data-bind
属性将属性绑定到HTML。最后我们选择了Knockout,因为视图绑定主要是我们的应用程序所需要的。 (...加上其他人,如后面所讨论的......)如果你喜欢Knockout的视图绑定和Backbone的模型绑定,那么KnockBack也会结合两个框架。
在Knockout之后看了这个 - 不幸的是我们似乎对Knockout如何看待绑定感到非常满意。它似乎比Knockout更复杂,更难进入。并且它使用一堆自定义HTML属性来进行绑定,我不确定我喜欢...我可能会在稍后再看看Angular,因为我遇到了很多真正喜欢这个框架的人 - 也许我们只是为这个项目看了太晚了。
没有真正仔细看过这些。虽然我知道Spine是一个类似于Backbone的框架,具有显式的Controller对象,并且是用CoffeeScript编写的。
后记
正如我所提到的,我们最终使用了Knockout,因为对于我们的项目,关注视图绑定更为重要。我们最终还使用RequireJS进行模块化,crossroads和Hasher来处理路由和历史记录,Jasmine进行测试,以及JQuery,{{3 }和Twitter Bootstrap(可能还有更多我现在忘记的库)。
Javascript应用程序开发更像是Java生态系统,而不是Rails生态系统。 Rails为每个应用程序(Rails框架)提供了一个可靠的核心,社区提供了很多自定义(gems)。 Java提供了一种语言。然后您可以选择Java EE或Spring或Play或Struts或Tapestry。并选择JDBC或Hibernate或TopLink或Ibatis与数据库通信。然后你可以使用Ant或Maven或Gradle来构建它。并选择Tomcat或Jetty或JBoss或WebLogin来运行它。因此,除了选择 框架之外,还要更加强调选择所需内容和哪些内容有效。
答案 1 :(得分:8)
你会喜欢的主要功能:
为了克服这些问题,我们开发了一个AJAX轮询器,错误处理和通用,加载&通知解决方案 我们使用dojo框架约定和结构非常容易地完成了它。 如果您不想这样做,也许您必须为此部分使用另一个框架。
在网络上查看优秀的SPA,您会发现所有这些都是自定义的并使用多个框架。但我们单独使用Dojo的经历太棒了。因此我建议你不要考虑任何其他框架,因为所有这些框架都不完整。但最终你还有另一种选择(我不推荐,也没有详细信息)。使用能够构建SPA的JAVA框架,自动生成UI&的JavaScript。