1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
<!DOCTYPE html>
<html>
<head>
<script src="/usr/share/javascript/jsquery/jquery.min.js" type="text/javascript"></script>
<script src="/usr/share/javascript/jsrender/jsrender.min.js" type="text/javascript"></script>
<link href="../resources/demos.css" rel="stylesheet" type="text/css" />
<link href="../resources/movielist.css" rel="stylesheet" type="text/css" />
</head>
<body>
<a href="../demos.html">JsRender Demos</a><br />
<h3>Template context: Passing in additional variables to a render() call</h3>
<div class="subhead">Passing in contextual variables or helper functions, using the options parameter of <em>...render( data, options );</em></div>
<pre>
$( selector ).render( data, {
reverseSort: reverse,
buttonCaption: reverse ? "Sort increasing" : "Sort decreasing",
format: myFormatFunction
})
</pre>
<div class="subhead">Use <em>~name</em> to context variables or helpers by name - whether passed in with options,</div>
<div class="subhead">registered globally as helpers, or registered as helpers for a specific template.</div>
<pre>
<th><button>{{>~buttonCaption}}</button></th>
...
<td>{{>~format(title)}}</td>
...
<td>{{sort languages reverse=~reverseSort}}...{{/sort}}</td>
</pre>
<!--================ Demo ================-->
<script id="movieTemplate" type="text/x-jsrender">
<thead>
<tr>
<th><button id="formatBtn">{{>~format('Title')}}</button></th>
<th><button id="sortBtn">{{>~buttonCaption}}</button></th>
</tr>
</thead>
<tbody>
{{for #data}}
<tr>
<td>{{>~format(title)}}</td>
<td>
{{sort languages reverse=~reverseSort}}
<div>
<b>{{>name}}</b>
</div>
{{/sort}}
</td>
</tr>
{{/for}}
</tbody>
</script>
<table id="movieList"></table>
<br />
<script type="text/javascript">
$.views.tags({
// Tag to reverse-sort an array
sort: function( array ) {
var ret = "";
if ( this.props.reverse ) {
// Render in reverse order
for ( var i = array.length; i; i-- ) {
ret += this.renderContent( array[ i - 1 ] );
}
} else {
// Render in original order
ret += this.renderContent( array );
}
return ret;
}
});
var reverse = false,
upperCase = false,
movies = [
{
title: "Meet Joe Black",
languages: [
{ name: "English" },
{ name: "French" }
]
},
{
title: "Eyes Wide Shut",
languages: [
{ name: "French" },
{ name: "German" },
{ name: "Spanish" }
]
}
];
function myFormatFunction(value) {
return upperCase ? value.toUpperCase() : value.toLowerCase();
}
$("#movieList")
.on("click", "#sortBtn", function(){
reverse = !reverse;
renderList();
})
.on("click", "#formatBtn", function(){
upperCase = !upperCase;
renderList();
});
function renderList() {
$( "#movieList" ).html(
$( "#movieTemplate" ).render( [movies], {
reverseSort: reverse,
buttonCaption: reverse ? "Sort increasing" : "Sort decreasing",
format: myFormatFunction
})
);
}
renderList();
</script>
</body>
</html>
|