我刚刚开始研究MVC结构,首先我看了backbone.js
是如何工作的,现在我刚刚完成了Code School的rails for zombies。我知道我没有深入探讨任何这一点,但我有一个问题要开始。
您可以一起使用这些库吗?
我已经学会了如何在两者中创建models
,views
等,但是在创建真正的应用程序时,您是否同时使用主干和rails?
如果是这样......
您何时使用backbone.js
模型与rails
模型?
也许我只是领先于自己,需要继续练习和做教程,但我似乎无法直接找到任何东西。
谢谢!
答案 0 :(得分:73)
在其他任何事情之前,我建议看一下thinkbot的Backbone.js on Rails书,这是一个很好的起点,虽然针对的是中级到高级的观众。我买了这本书,已经使用过rails,但作为一个完整的主干。初学者,它对我有很好的帮助。
除此之外,结合这些框架存在一些基本问题,这些问题超出了本书和其他书籍所涵盖的细节。以下是我建议你考虑的一些事情,根据我自己的经验配对RoR和backbone.js。这是一个很长的答案,并且从你的问题的具体细节中略微偏离,但我希望它可以帮助你进入"大图片"理解你所面临的问题的感觉。
在rails应用程序之上使用backbone.js时,首先要考虑的是如何处理视图,但这实际上只是更深层次问题的表面。问题在于创建RESTful Web服务意味着什么。
Rails开箱即用,鼓励用户创建RESTful服务,方法是根据通过标准HTTP操作在统一URI(在routes.rb
文件中定义)访问的一组资源构建路由。因此,如果您拥有Post
模型,则可以:
GET
/posts
请求来获取所有帖子
GET
发送/posts/new
请求来创建新帖子,填写表单并将其发送(POST
请求)至/posts
123
发送GET
请求,填写表单并将其(/posts/123/edit
请求)发送至PUT
,以更新标识为posts/123
的帖子} 123
DELETE
请求,销毁ID为/posts/123
的帖子
关于Rails这个方面要记住的关键是它基本上是无状态:不管我以前做过什么,我只需发送一个{Post
即可创建一个新的POST
{1}}使用有效的表单数据请求正确的URI,例如/posts
。当然有一些警告:我可能需要登录(有一个会话cookie识别我),但实际上Rails并不真正关心我在发送请求之前所做的事情。我可以通过更新其他帖子,或通过向我提供的任何其他资源发送有效的操作来跟进。
如何设计Rails的这一方面使得将(Javascript-light)Rails Web应用程序转换为API相对容易:资源将类似或相同,Web框架返回HTML页面而API(通常)以JSON或XML格式返回数据。
Backbone也基于RESTful资源。无论何时创建,更新或销毁backbone.js模型,都可以通过发送到URI的标准HTTP操作来实现,这些URI采用上述类型的RESTful架构。这使其成为与RoR等RESTful服务集成的理想选择。
但这里有一个微妙的要点:backbone.js与Rails 无缝集成,作为API 。也就是说,如果您剥离HTML视图并且只使用Rails 来提供RESTful资源,与数据库集成,执行会话管理等,那么它与骨干结构非常完美地集成在一起.js提供客户端代码。许多人认为there's nothing wrong with using rails this way,我认为他们在很多方面都是正确的。
出现的复杂问题来自于如何处理我们刚刚抛弃的Rails的其他部分:视图及其代表的内容。
这实际上比最初看起来更重要。 HTML视图表示人们用于访问服务提供的RESTful资源的无状态接口。取消它们会留下两个接入点:
请注意,人类不再有无状态(RESTful)接口。相比之下,在带有API的传统rails应用程序中,我们更接近于此:
用于访问资源的后两个接口在性质上比前两个接近很多。试想一下rails' respond_with,利用相似性将统一方法中的各种REST响应者包装起来。
这可能看起来非常抽象,而且我知道。为了使其更具体,请考虑以下问题,这回到了关于让rails和backbone.js一起工作的问题。在这个问题中,你想要:
pushState
为应用中的每个网页提供一个网址(例如/posts/123
),该网址可以直接访问(通过将其输入浏览器栏)。这些对于现代Web服务并非不寻常的要求,但它们带来了复杂的挑战。长话短说,你现在必须创建 two "以人为本"层:
实际执行此操作的复杂性导致许多人现在放弃了后两者,只提供了丰富的客户端界面。你决定做什么取决于你的目标和你想要达到的目标,但是值得仔细考虑这个问题。
作为另一个可能的参考,我建议看看O' Reilly的RESTful Web Services。在关于Rails和Backbone.js的问题上推荐一本关于REST的书可能看起来很奇怪,但实际上我认为这是将这些非常不同的框架组合在一起的关键部分,并且更全面地理解它将帮助您利用两者的优势。
答案 1 :(得分:1)
是的,你可以并排使用。 Backbone用于在客户端浏览器中存储和操作数据。它通常需要服务器与>>中的数据进行通信和获取。这就是Rails的用武之地。您可以拥有一个没有繁重客户端代码的Web应用程序。 Backbone用于构建更像应用程序的网站 - 想想Gmail或Pandora。
我建议先学习Rails。一旦你可以按照自己的意愿加载和设置静态页面,那么理解Backbone的位置会更有意义
答案 2 :(得分:1)
我使用rails作为后端服务器来服务一个相当大的网站,其中包括一些单页应用程序(内置主干)。
我建议使用backbone-on-rails
宝石。我们的想法是,您的rails服务器将在您的一个视图中将骨干应用程序作为脚本标记提供。您将主干应用程序本身保留在rails app/assets
文件夹中。
Backbone了解rails路由约定,你只需要给它一个json api的路径,rails几乎可以为你rails generate resource
生成。
除了模型之间的同步之外,您的主干应用和rails应用程序是相当独立的。 Backbone和Rails没有完全相同的MVC模型,但让它们合作非常容易。