Shared Handlebars Templates for Rails 3

Hello my dear friends. Today we will talk about the way, how we share handlebars templates in Rails 3. In the previous article I explained you how we share mustache templates between rails backend and javascript frontend in our company. After article publication, many people turned to the question “What about handlebars templates?”. With a little of efforts, we have created an alternative gem for shared templates – SHT_rails (Shared Handlebars Templates for Rails).

How it works?

First of all you have to add this gem to your Gemfile and start ‘bundle install’:
gem 'sht_rails', git: 'git://'
Next launch generator:
rails g sht_rails:install
That’s all.Now you can create a directory in ‘app/templates’ handlebars templates (these templates ends with ‘.handlebars’ by default). Let’s create partial for the product:File: ‘app/templates/products/_product.handlebarsContent:
<a href="{{url}}">{{title}}</a>
You can render this partial in ActiveView:
<%= render "products/product", :handlebars => product.as_json %> 
And in JavaScript:
var product = … ; come from ajax call as json
var content = SHT['products/product'](product);
If you want use handlebars partials, here example in ActiveView:
<%= render "products/product", :handlebars => product.as_json, :partials => {:partial_key => (render "products/partial")} %>
And in Javascript:
Handlebars.registerPartial('partial_key', SHT['products/partial'])
content = SHT['products/product'](product)
So in the end you’ll have only one template, which is shared between Rails and JavaScript. The gem has one disadvantage (in my humble opinion) – it installed on the backend “therubyracer” gem, which compile templates on backend. Basically this gem is used to precompile assets in rails and doesn’t require on production.Demo application with scroll pagination you can find hereSource code:’s all folks!


Rubygems: code: