ActionView::Template::Error (no such file to load -- eco
How do I get Rails 3.1 to package my Eco templates?
Add the following line to your Gemfile:
gem 'eco'
Run bundle install and Sprockets (a.k.a. the asset pipeline) is now ready to compile .eco files in app/assets/javascripts to JavaScript.
How do I find and render my Eco templates in my CoffeeScript?
Let's assume you want your embedded template to live in:
app/assets/javascripts/todos/views
If you think you can name your template todo.eco or even todo.js.eco, you're wrong. (Todos is an archetypical JavaScript framework demo app.) Although the template compiles down to a JavaScript function, at the time of this writing, the JavaScript compiled from todo.js.eco will produce a runtime error. Apparently, a JavaScript templating system is required. The easiest solution is to use JST, which Sprockets provides by default. (jQuery Templates are another option, via the sprockets-jquery-tmpl gem.)
Thus,
app/assets/javascripts/todos/views/todo.jst.eco
can be rendered in your CoffeeScript using:
JST['todos/views/todo']()
For a full working example of Eco templates with Rails and Spine, check out Alex MacCaw's infinite scrolling screencast and source.
Update (12/14/2011): Slides from my presentation on Eco at URUG are now online: http://backbonecoffeescript.com/eco-coffeescript-templates
In your slides, you had said "It’s up to you to prepare your context, but once you do, help is at hand.". Can you give an example of how to wire up context helpers?
ReplyDeleteKen, the short answer is that with Eco, it's up to you to do it in ad-hoc fashion. Just include any helper functions you want as properties on the "context" object you pass in when rendering. Check back here again in a couple days, I will put up an interactive Try Eco page illustrating this.
ReplyDeleteKen,
ReplyDeleteI wrote a short tutorial about context and helpers in Eco:
http://backbonecoffeescript.com/eco-helpers-tutorial
Just a quick note -- the JST var won't be defined (you'll get a "Uncaught ReferenceError: JST is not defined") unless you 'require' your templates like any other javascript file (eg, in application.js, //=require todos/views/todo).
ReplyDeleteThis includes the compiled eco template in the rest of your assets, defining JST['todo']. (Somehow I missed this -- I guess I thought it would just be magic?)
Thanks for the writeup, helped a lot.
Has anyone used these with requirejs or requirejs-rails?
ReplyDeleteThis is what I was looking for, thanks :D
ReplyDelete