Last active
April 5, 2024 14:29
-
-
Save funkjedi/5732611 to your computer and use it in GitHub Desktop.
Integrates Handlebars with Marionette. First attempts to load pre-compiled templates, then by selector, and finally via XHR.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
Usage: Just include this script after Marionette and Handlebars loading | |
IF you use require.js add script to shim and describe it in the requirements | |
*/ | |
(function(Handlebars, Marionette) { | |
Marionette.Handlebars = { | |
path: 'templates/', | |
extension: '.handlebars' | |
}; | |
Marionette.TemplateCache.prototype.load = function() { | |
if (this.compiledTemplate) { | |
return this.compiledTemplate; | |
} | |
if (Handlebars.templates && Handlebars.templates[this.templateId]) { | |
this.compiledTemplate = Handlebars.templates[this.templateId]; | |
} | |
else { | |
var template = this.loadTemplate(this.templateId); | |
this.compiledTemplate = this.compileTemplate(template); | |
} | |
return this.compiledTemplate; | |
}; | |
Marionette.TemplateCache.prototype.loadTemplate = function(templateId) { | |
var template, templateUrl; | |
try { | |
template = Marionette.$(templateId).html(); | |
} | |
catch (e) {} | |
if (!template || template.length === 0) { | |
templateUrl = Marionette.Handlebars.path + templateId + Marionette.Handlebars.extension; | |
Marionette.$.ajax({ | |
url: templateUrl, | |
success: function(data) { | |
template = data; | |
}, | |
async: false | |
}); | |
if (!template || template.length === 0){ | |
throw "NoTemplateError - Could not find template: '" + templateUrl + "'"; | |
} | |
} | |
return template; | |
}; | |
Marionette.TemplateCache.prototype.compileTemplate = function(rawTemplate) { | |
return Handlebars.compile(rawTemplate); | |
}; | |
}(Handlebars, Marionette)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this! I've been using it for a while. Marionette 2.0 has broken it, though.
Marionette.$
is no longer with us, but replacing it withBackbone.$
does the job. I've just forked and fixed it, feel free to help yourself :)