Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combining Ruby on Rails and Backbone

I was wondering this for quite a while and haven't really found an answer for this yet.

Why would you use Backbone.js exaclty inside a Rails application? Is it to extend functionality, have a more MVC pattern for your JS, build better API's...?

At the moment I can't see a reason why you would want to use it for something, because I don't think I understand the concept of Backbone.js

like image 947
Karo Devos Avatar asked Jun 08 '11 11:06

Karo Devos


1 Answers

The big advantage of rails is that you have one platform and one language that you use that will handle the server-code and can generate the client-code (using the views).

Undoubtedly this theoretical advantage quickly starts slipping once you want to improve your user-experience with javascript and jquery. So actually you still have to learn two languages.

But still: all your models, business-rules, ... is handled on the server-side in Ruby. This also means that the server always has to be reachable.

What a javacript/client MVC (like Backbone.js, Sproutcore, ...) can offer you is a more native application feel. A single web-page application, like e.g. Gmail. Depending on your requirements there are some very valid use-cases for such a platform. E.g. in places or devices with low connectivity it could be very useful (with HTML5) to have a web-application that does not need to be "online" all the time. It could save data and edits to the local storage and sync back to the server/database when the device is back online.

But, there is a big disadvantage when developing client MVC applications in combination with Rails: you will have to do some double development (it is the same when you are using flex/silverlight). Your models will need to be defined both on the server and on the client. I can imagine that some improvements could be made, like on the client MVC you are actually using presenter-classes, which on the server-side could be stored in different models/tables. But still there will be duplication of logic, models, ...

So that's why I think that for most applications, at the moment, it is not wise to switch to some client MVC framework. It will be a lot more work.

But when you do need the look and feel of a real native application, or a one-page-web application, then a javascript client MVC framework is the way to go. And if you do need a client MVC framework, I would propose Sproutcore.

To simply ajaxify your current rails application (reduces load-time of every single page), take a look at pjax-rails.

like image 193
nathanvda Avatar answered Sep 28 '22 22:09

nathanvda