Is it possible to store a jsRender template in a separate file?
I want to store it in a separate file and make a reference of it in my page.
something like this
<script id="templateName" type="text/x-jsrender" src="thisIsTheTemplate.js"></script>
I will apreciate any commemnts or suggestions.
Thanks
Here is a function I wrote to load one or more external templates at once. It also caches the templates so if one is already loaded it won't load again.
Use it like so:
In case you're trying to load external templates from a local file, like I was, let me save you some frustration. Don't use the jQuery
$.get()
as recommended in balexandre's answer.Use
$.ajax()
, and setasync: true
anddataType: text
, otherwise it gives you an error:elem.getAttribute is not a function
. See my answer to Error when loading jsrender templates through AJAX for details.I recently ran into this problem myself. After looking through the jsRender code, and studying other javascript libraries, I decided to write my own library that would simplify loading external templates so that one could attach templates to a html page using the
<link>
tag and render them by simply including the .js file. If you would like to check it out, I have posted the code on github with examples:https://github.com/stevenmhunt/tmpl.loader
This library works with jsRender, as well as any code capable of processing a template.
Enjoy!
in my experience, you don't need to work with that trouble, you just need to append the template to the page before you using it. see below code.
in this way, you don't need to request a ajax file everytime you want to render a js template
Yes, you can accomplish this (I use this every time).
let's assume that you have your templates in a
template
folder and it is called, for example_productDetails.tmpl.html
in your page you use jQuery
$.get()
to pull it and load into the template, like:and you pass an object
item
witch will contain all 3 properties, like:You can have a nice utilities class to hold all this:
and you can easily call
my.utils.renderExtTemplate(item);