Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Ember Handlebars Precompile
require 'execjs'
class HandlebarsFilter < Filter
class << self
def contents
@@contents ||= ["headless-ember.js"),"ember.js")].join("\n")
def context
@@context ||= ExecJS.compile(contents)
def generate_output(inputs, output)
inputs.each do |input|
name = File.basename(input.path, '.handlebars')
compiled ="precompileEmberHandlebars",
output.write "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{compiled});\n"
input "templates"
output "output"
match "*.handlebars" do
filter HandlebarsFilter
concat "templates.js"
// DOM
var Element = {};
Element.firstChild = function () { return Element; };
Element.innerHTML = function () { return Element; };
var document = { createRange: false, createElement: function() { return Element; } };
var window = this;
this.document = document;
// Console
var console = window.console = {};
console.log = = console.warn = console.error = function(){};
// jQuery
var jQuery = function() { return jQuery; };
jQuery.ready = function() { return jQuery; };
jQuery.inArray = function() { return jQuery; };
jQuery.jquery = "1.7.1";
var $ = jQuery;
// Ember
function precompileEmberHandlebars(string) {
return Ember.Handlebars.precompile(string).toString();

wagenet commented Jan 13, 2012

By the way, this requires Ember master as of 1/13.


wagenet commented Jan 13, 2012

Oh, and a special thanks to @tchak for helping me figure this out!

garth commented Jan 13, 2012

I'm guessing that we should be able to replace Assetfile.rb with some equivalent js and run this through nodejs?


wagenet commented Jan 14, 2012

@garth, in theory yes. The main thing is that you have to have a full Ember running to get proper compilation. Unforunately, right now that requires stubbing some things out like in my headless-ember.js.

@wagenet I am getting error when compiling ember 1.0.0-pre.4 in this line Any workaround?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment