我正在尝试jsRender。
我想做什么:
JS模板:
<script id="theaterTemplate" type="text/x-jquery-tmpl">
{{*
if ("{{=theaterId}}" == getCurrentTheaterId()) {
}}
<a class="active" href="#">
{{*
} else {
}}
<a href="#">
{{* } }}
{{=theaterName}}
</a>
</script>
在其他JS中:
function getCurrentTheaterId() {
return "523";
}
基本上,在模板中,如果迭代中的当前影院ID与从js函数返回的内容匹配,则将该类设置为活动。 &#34; {{= theaterId}}&#34;在if条件下中断。我猜你不允许在if条件下访问当前的json属性。
关于如何做到这一点的任何想法?
希望这是有道理的。谢谢!
答案 0 :(得分:6)
在他们的示例程序中,他们有:
$.views.allowCode = true;/
http://borismoore.github.com/jsrender/demos/step-by-step/11_allow-code.html
[编辑]
你必须'告诉'jsRender关于外部功能。这是一个有效的例子:
<script type="text/javascript">
function IsSpecialYear()
{
return '1998';
}
// tell jsRender about our function
$.views.registerHelpers({ HlpIsSpecialYear: IsSpecialYear });
</script>
<script id="movieTemplate" type= "text/html">
{{#if ReleaseYear == $ctx.HlpIsSpecialYear() }}
<div style="background-color:Blue;">
{{else}}
<div>
{{/if}}
{{=$itemNumber}}: <b>{{=Name}}</b> ({{=ReleaseYear}})
</div>
</script>
<div id="movieList"></div>
<script type="text/javascript">
var movies = [
{ Name: "The Red Violin", ReleaseYear: "1998" },
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
{ Name: "The Inheritance", ReleaseYear: "1976" }
];
$.views.allowCode = true;
$("#movieList").html(
$("#movieTemplate").render(movies)
);
</script>
[编辑2]一个更复杂的布尔条件:
function IsSpecialYear(Year, Index)
{
if ((Year == '1998') && (Index == 1))
return true;
else
return false;
}
// tell jsRender about our function
$.views.registerHelpers({ HlpIsSpecialYear: IsSpecialYear });
</script>
<script id="movieTemplate" type= "text/html">
{{#if $ctx.HlpIsSpecialYear(ReleaseYear, $itemNumber) }}
<div style="background-color:Blue;">
{{else}}
<div>
{{/if}}
答案 1 :(得分:2)
&安培;&安培;直到最近有一个beta候选人出现才被支持。您在模板中以声明方式执行的逻辑量是有限的,并且不包括&amp;&amp;或||。然而,对比较运算符的支持现在非常完整。这里有一些例子:http://borismoore.github.com/jsrender/demos/step-by-step/10_comparison-tests.html