2011-06-22 52 views
0

对于jQuery模板,我试图使用{{wrap}}模板标记来包装另一个模板的结果。这第二个模板呈现纯文本,而不是HTML。我目前得到一个空字符串,我期望得到由包装模板呈现的纯文本。使用jquery-template {{wrap}}封装纯文本

如果我使用一些HTML元素(如<div>标记)围绕纯文本,则一切正常,但我将<div>渲染到结果中。我会很好地在我的内容上创建一个虚拟标签,以使{{html}}标签正常工作,但我不希望它在呈现的结果中显示。

我也想使用这个相同的包装器,如果可能的话包装实际上也会生成HTML的模板,所以如果同一个包装器模板可以适用于这两种情况,那将会很好。

这里是我的HTML:

<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> 

,这里是使用JavaScript来调用模板:

$("#x").html($("#myTmpl").tmpl()); 

该代码可以在此的jsfiddle发现:http://jsfiddle.net/bernardchen1/BYdeg/

+0

任何机会,你可以重构你的代码使用'{{tmpl}}'标记(而不是'{{wrap}}') –

+0

是的,但我需要一个{{tmpl}}之前和之后我正在尝试换行。 –

回答

0

我终究找到了解决方案。我创建了一个虚拟标签来包装纯文本(甚至是由其他模板生成的html),然后我创建了一个函数,将其传递到可以去除虚标记的模板调用中。我像这样调用它:{{html $data.clean($item)}}。 “干净”功能需要访问由内部模板返回的内容,我发现它是$item.wrapped[0]。一旦我有了这些内容,我就可以从clean函数返回它的内部html。

我很担心我是否应该访问$item.wrapped

最终,我可能只是尝试重构我的代码,不需要此虚拟标记和清理功能。

该解决方案可以在这里找到:http://jsfiddle.net/bernardchen1/nmzWt/

编辑:还有另一种解决方案调用appendTo到HTML模板附加到另一个DOM元素,然后获取数据退了出去。