使用jQuery模板,我正在尝试使用{{wrap}}模板标记来包装另一个模板的结果。第二个模板呈现纯文本,而不是HTML。我目前得到一个空字符串,我希望得到包装模板呈现的纯文本。
如果我使用一些HTML元素(如<div>
标记)包围纯文本,那么一切正常,但我会将<div>
渲染到结果中。我可以在我的内容周围创建一个虚拟标记,以使{{html}}标记起作用,但我不希望它在渲染结果中。
我还想使用这个相同的包装器,如果可能的话,还可以包装实际生成HTML的模板,所以如果相同的包装器模板可以适用于这两种情况,那将是很好的。
这是我的代码:
$("#x").html($("#myTmpl").tmpl());
<div id="x" />
<script id="myTmpl" type="text/x-jquery-tmpl">
The following wraps some non-HTML content: {{wrap "#wrapper"}} help {{/wrap}}
</script>
<script id="wrapper" type="text/x-jquery-tmpl">
<table>
<tbody>
<tr>
<td>
Wrapped content: {{html $item.html}}
</td>
</tr>
</tbody>
</table>
</script>
此代码可在此jsFiddle中找到:http://jsfiddle.net/bernardchen1/BYdeg/
答案 0 :(得分:0)
我最终找到了解决方案。我创建了一个使用虚拟标签来包装纯文本(甚至是由其他模板生成的html),然后我创建了一个函数,我将其传递给模板调用,可以去掉虚拟标签。我这样调用它:{{html $data.clean($item)}}
。 “clean”函数需要访问内部模板返回的内容,我发现它是$item.wrapped[0]
。一旦我有了这些内容,我就可以让它的内部html从clean函数返回。
我担心我是否应该访问$item.wrapped
。
最终,我可能只是尝试重构我的代码,不需要这个虚拟标签和清洁功能。
此解决方案可在此处找到:http://jsfiddle.net/bernardchen1/nmzWt/
编辑:还有另一种解决方案,可以调用appendTo将模板html附加到另一个DOM元素,然后再将数据拿回来。