使用jquery-template {{wrap}}来包装纯文本

问题描述 投票:0回答:1

使用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/找到

javascript jquery jquery-templates
1个回答
0
投票

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

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

最后,我可能只是尝试重构我的代码,不需要这个虚拟标签和清洁功能。

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

编辑:还有另一个解决方案来调用appendTo将模板html附加到另一个DOM元素,然后将数据取回。

© www.soinside.com 2019 - 2024. All rights reserved.