Commit
approach using wrapped arrays. (See new sample 05_arrays-plus-headers-and-footers.html). Modified the behavior when you render a template with no data, so that now it will render once. You can call {{for tmpl='myTmpl'/}} or $.render.myTmpl(), and the template will be rendered once, with current data item 'undefined'. See many new unit tests which indicate the details of this behavior. See also discussion in issues 57 and 118.
- Loading branch information
There are no files selected for viewing
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
|
@@ -10,34 +10,33 @@ | ||
<body> | <body> | ||
<a href="../demos.html">JsRender Demos</a><br /> | <a href="../demos.html">JsRender Demos</a><br /> | ||
|
|
||
<h3>Using layout templates to render arrays along with headers or footers.</h3> | <h3>To pass an array to a "layout template" - which includes headers or footers,<br /> | ||
as well as the rendered items - wrap the array in an array...</h3> | |||
|
|
||
<div class="subhead">Top-level layout:</div> | <div class="subhead">Top-level layout:</div> | ||
<pre> | <pre> | ||
$.templates( "moviesLayout", { | |||
markup: "#movieTemplate", | |||
layout: true | |||
}); | |||
|
|||
$( "#movieList" ).html( | $( "#movieList" ).html( | ||
$.render.moviesLayout( movies ) | // Wrap movies array in an array | ||
$("#movieTemplate").render( [movies] ) | |||
); | ); | ||
|
|
||
header | Template: | ||
{{for #data}} |
|
||
item | header | ||
{{/for}} | {{for #data}} | ||
footer | item | ||
{{/for}} | |||
footer | |||
</pre> | </pre> | ||
|
|
||
<div class="subhead">Nested layout:</div> | <div class="subhead">Nested layout:</div> | ||
<pre> | <pre> | ||
{{for languages layout=true}} | {{for [languages]}} | ||
header | header | ||
{{for #data}} | {{for #data}} | ||
item | item | ||
{{/for}} | {{/for}} | ||
footer | footer | ||
{{/for}} | {{/for}} | ||
</pre> | </pre> | ||
|
|
||
|
@@ -53,17 +52,16 @@ <h3>Using layout templates to render arrays along with headers or footers.</h3> | ||
<tr> | <tr> | ||
<td>{{:title}}</td> | <td>{{:title}}</td> | ||
<td> | <td> | ||
{{for languages layout=true}} | {{for [languages]}} | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
BorisMoore
Author
Owner
|
|||
<div> | <div> | ||
{{if #data}} | {{if #data}} | ||
<strong>{{:length}}</strong> languages available: | <strong>{{:length}}</strong> languages available: | ||
{{for #data}} | |||
<em>{{:name}}</em> | |||
{{/for}} | |||
{{else}} | {{else}} | ||
Original version only | Original version only | ||
{{/if}} | {{/if}} | ||
|
|||
{{for #data}} | |||
<em>{{:name}}</em> | |||
{{/for}} | |||
</div> | </div> | ||
<div> | <div> | ||
{{if #data}} | {{if #data}} | ||
|
@@ -101,14 +99,9 @@ <h3>Using layout templates to render arrays along with headers or footers.</h3> | ||
] | ] | ||
} | } | ||
]; | ]; | ||
|
|||
$.templates( "moviesLayout", { | |||
markup: "#movieTemplate", | |||
layout: true | |||
}); | |||
|
|||
$( "#movieList" ).html( | $( "#movieList" ).html( | ||
$.render.moviesLayout( movies ) | // Wrap movies array in an array | ||
$( "#movieTemplate" ).render( [movies] ) | |||
); | ); | ||
</script> | </script> | ||
|
|
||
|
Why is it
[languages]
as opposed to justlanguages
? Are those brackets required or optional? If required, it's unnecessary syntax detail to remember each time one uses for. I supposed it's there to prevent from traversing objects (non-arrays).My suggestion for that is to simplify it even more by introducing more explicit include tag.
{{for}}
a dedicated tag for iterating over arrays/collections. This means that primary usage scenario is always{{for someArray}} something-to-iterate-through {{/for}
.{{for}}
is iterating with a named template{{for someArray tmpl=templateName}}
.{{include templateName/}}
. It does not iterate but simply includes a single instance of other template (either named or # dom element based).