What is it?
A set of Rails 3 generators that generate client-side artefacts for use in applications based on Backbone.js. The generators were initially used to encapsulate the design patterns that we use in an application of ours, but they may be useful in other projects as well.
What do they create?
For a quick overview of the source code generated by the generators, see X.
Currently, there are only two generators available of which the most important is a scaffold generator that creates a bunch of artefacts based on an existing ActiveRecord model. It takes the name of an existing ActiveRecord model as input (e.g. 'Milestone'):
rails generate backbone:scaffold Milestone
Backbone.Modelwith corresponding support for validation, I18N, and associations.
Backbone.Controllerwith RESTful routes for managing various views.
Backbone.Views for displaying collections and individual models.
- Skeleton SCSS stylesheets for styling the rendered views.
- Handlebars.js templates containing the markup for the views.
As you notice, the generated source code is at this point specific to Sass (and the SCSS variation in particular) and Handlebars.js. The intention is later to offer a few other options for styling and rendering and you are encouraged to share your template modifications while we set up a way to opt in for these.
We realize that the generated source code may not be suitable out-of-the-box for many applications, which is why we encourage you to tweak the templates to suit your particular application. We believe that for mid-sized to large applications this work pays off, especially if there are several developers in your team and you need to make sure they structure their code in the same way -- this project is as much about enforcing design rules and best practices as it is about preventing repetetive typing (although your definition of 'best' may greatly differ from ours :-).
A generator for mixins
Rather than repeating code that is common for all models, views, or controllers,
we have included a set of mixins that can be applied to these. The mixins are
added to your project using the
backbone:mixins generator and include:
- RESTful routes and actions for controllers
- I18N with support for Rails translation files
As mentioned, the existing templates were designed with a particular project in mind to make sure a set of patterns decided for that project are used everywhere. To summarize, these are:
- Backbone models expose accessor functions in addition to the built-in
Backbone.Model. The reasoning behind this is to offer a consistent API whether you are reading a value stored in the ActiveRecord back-end or a calculated value.
has_manyassociations in the ActiveRecord model are converted to nested
Backbone.Collections in the Backbone model, accessible via access functions. By default, only
has_manyassociations marked with
:dependent => :destroyare managed by nested collections. The reasoning behind this is that for us this was a clear indication of a composition where you would normally have the nested collection included in the JSON returned from the server.
For instance, if a
User model has
last_name attributes a helper function may be added to
fullName(). Rather than accessing first and last names differently
than with the full name, the
last_name attributes are encapsulated
in accessor methods