Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define mustache partials in HTML?

this is my html:

<script type="text/html" id="ul-template">     <ul id="list">         {{> li-templ}}     </ul> </script>    <script type="text/html" id="ul-template2">     <div id="list2">         {{> li-templ}}     </div> </script>      <script type="text/html" id="li-templ">     <p>{{ name }}</p> </script>   

as you can see, I want to reuse the #li-templ part, but it seems that I have to write it into a file called li-templ.mustache then I can include it as partial?
can I just define them in the single html file?

like image 254
wong2 Avatar asked Nov 10 '11 08:11

wong2


People also ask

How do I render a mustache in HTML?

render = function (template, view, partials) { return this. compile(template)(view, partials); }; This is the most basic form of templating with mustache. Let's see the other methods available for creating more organized code.

What is partial in mustache?

The object should be keyed by the name of the partial, and its value should be the partial text. You'll have to retrieve the template's text and provide that to Mustache.render() (e.g., with jQuery): $. get('path/template.mustache', function (partialTemplate) { var html = Mustache.

What is mustache syntax?

Mustache is a logic-less template syntax. It can be used for HTML, config files, source code - anything. It works by expanding tags in a template using values provided in a hash or object. We call it "logic-less" because there are no if statements, else clauses, or for loops.


1 Answers

I'm assuming you're using the JS flavor of Mustache.

In mustache.js an object of partials may be passed as the third argument to Mustache.render. The object should be keyed by the name of the partial, and its value should be the partial text.

You need to:

  1. Define some dummy data for name
  2. Get your partial template by getting the HTML of #li-templ
  3. Create an object with the name of the partial (li-templ) as the key
  4. Tell Mustache to render each template with the view data including your partial

Here's some jQuery to do just that:

var view = {"name" : "You"}, li = $('#li-templ').html(),  partials = {"li-templ": li}, ul1 = Mustache.to_html($('#ul-template').html(), view, partials), ul2 = Mustache.to_html($('#ul-template2').html(), view, partials);;  document.write(ul1, ul2); 

Here's a jsFiddle of it all working- http://jsfiddle.net/maxbeatty/EYDfP/

like image 61
maxbeatty Avatar answered Oct 15 '22 00:10

maxbeatty