我一直在使用jTemplates,并尝试使用jQuery + jTemplates + Web Services完全构建一个站点。事情变得非常好,直到我偶然发现这样的情况,我需要添加一些服务器控件或需要使用代码块<%= DoSomething(param)%>来解决后面代码中的一些数据。在模板渲染中。
考虑以下jTemplates的精简版本:
<script type="text/html" id="ContentTemplates">
{#template MAIN}
{#foreach $T.Products as product}
<div id="div-product-{$T.product.Id}" class="product-wrapper">
{#include Content root=$T.product}
</div>
{#/for}
{#/template MAIN}
{#template Content}
<div class="view-container">
<p>Id: {$T.Id}</p>
<p>Desc: {$T.Desc}</p>
<p>Vendor Id: {$T.VendorId}</p>
<!-- Vendor name doesn't supplied by the web service,
it needs to be resolved using ASP.NET server code -->
<p>Vendor Name: <%= GetVendorName({$T.VendorId}) %></p>
<!-- i was hoping to do something like this,
but apparently it wouldn't work this way -->
</div>
{#/template Content}
</script>
现在我因为未能实现像这样简单的事情而在墙上敲我的头..这是我错过了什么?或者是jTemplates真的应该用于渲染简单的HTML布局吗?模板引擎是否能够解析服务器代码块?或者我只是被骗了?
答案 0 :(得分:0)
这就是我最终的结果:
<p>Vendor Name: <span class="vendor-name" vid="{$T.VendorId}"></span></p>
我没有尝试在渲染过程中执行服务器代码(这是不可能的),而是在占位符<span>
上渲染id,然后使用jQuery在以后注入值。
// After template is rendered
$.each($(".vendor-name"), function(){
$this = $(this);
var vid = $this.attr("vid");
$this.append("<%= GetVendorName(" + vid + ") %>")
});
Hacky,但至少它有效;)