Skip to content

martineboh/meteor-spacebars-tohtml

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meteor Spacebars.toHTML

A simple helper function to assist with rendering spacebars to HTML. Works on both the server and the client.

Installation

$ meteor add dburles:spacebars-tohtml

API

Super basic example

Spacebars.toHTML({ name: 'foo' }, '<p>Hello {{name}}</p>');

Any helpers defined with Template.registerHelper will be rendered just like usual. If you're on the server you'll need to make sure they're not just defined on the client so it can see them.

Rendering templates on the server

We can render templates on the server by creating files within the private directory.

For example, we could create private/example.html and its contents might look like:

<html>
<head>
  <title>Example</title>
</head>
<body>
  <h1>Example</h1>
  
  <p>Hello {{name}} this is just an example!</p>
</body>
</html>

We can then render it using Meteor's Assets API

var html = Spacebars.toHTML({ name: 'foo' }, Assets.getText('example.html'));

This is very useful for sending HTML emails.

Iron Router

We can also serve templates using Iron Router's server side routes.

Here's a simple example:

Router.route('/test', function() {
  // This could also come from a Collection
  var data = { name: 'foo' };
  
  this.response.writeHead(200, { 'Content-Type': 'text/html' });
  this.response.end(Spacebars.toHTML(data, Assets.getText('example.html')));
}, { where: 'server' });

Template inclusion

Server side only

Currently there's no way to pull in templates using the {{> inclusion}} operator, though we can create our own helper to do much the same thing.

Template.registerHelper('include', function(template, data) {
  data = data || {};
  return Spacebars.toHTML(data, Assets.getText(template));
});

and within our template, for example:

<nav>
  {{{include 'navigation.html'}}}
</nav>
...

We can also pass in an optional data context:

<nav>
  {{{include 'navigation.html' navItems}}}
</nav>
...

Note that we use the triple-stash here so the HTML is not escaped.

License

MIT

About

Meteor package to ease rendering spacebars to html

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%